字符数组和字符串类型(第十八课)
C语言 字符数组与字符串
![C语言 字符数组与字符串](https://img.taocdn.com/s3/m/8d1fd6390912a21614792987.png)
name1=“Apple”; ×
char name1[5], name2[3]; name1=name2; × strcpy(符号串, name1); ×
28
说明:
①在向name1复制时,字符串结束标志’\0‟一起被复制到name1中。 ②数组2的大小不能大于数组1的大小。 ③可以用strcpy将字符串2中前面若干个字符复制到字符数组1中。 strcpy(str1,str2,2);(参见P137)
符),将终止输入。
11
Program main(){ char word1[40], word2[40], word3[40], word4[40]; printf("Enter text:\n"); scanf("%s %s", word1, word2); scanf("%s", word3); scanf("%s", word4); printf("\n"); printf("word1 = %s\nword2= %s\n", word1, word2); printf("word3 = %s\nword4= %s\n", word3, word4); }
例:char
printf(“%s”,name);
• 功能:以name为起始输出字符,直到遇到’\0‟结束
说明: ① 只需写出数组名,不用带下标。 ② 不会输出’\0‟ ③ 不论有多少个’\0‟,遇到第一个就结束输出。
20
• 输出整个字符串(这是输出字符串特有的方式)
Ⅱ
用puts函数 name[9]; puts(name);
字符数组和字符串
![字符数组和字符串](https://img.taocdn.com/s3/m/48be9e5e03768e9951e79b89680203d8ce2f6ab0.png)
* ** ** ** *
}
main() a
{ char a[5]; int i=0;
b
while(i<=4)
c
{ scanf(“%c”,&a[i]);
c
i
{ char a[5]; int i=0
跳格分隔。因此不要试图利用scanf函数从键盘输入
How are you? 赋给一个字符串。
1.5 字符数组处理函数
1.字符串输入gets()函数 使用形式: gets(字符数组) 功能:从终端输入一个字符串(直到回车键) 到字符数组中。
例如:char str[20]; gets(str); 若从键盘输入:Hello World! 则将字符串“Hello World!”送到字符数组str中。
输出:10 char str[80]={“ab\n\0y\012/\\\””} ; printf(“%d”,strlen(str)) ;
输出:3
4.字符串连接strcat()函数
使用形式: strcat(字符数组1,字符串2)
如:“china” 占内存6个字节,但字符串长度 是5 在C语言中用字符数组来处理字符串,每个 元素存放一个字符型数据。
字符型数组可用一般数组的初始化方式初始化 外,还可以使用字符串常量初始化:
如:char message[]={“Hello”}; √ 或 char message[]=“Hello”; √
说明:字符数组本身并不要求它的最后一个元素一
定是‘\0’,例如:char ch[2]={‘A’, ‘B’};是合法的。 当定义字符数组用字符串常量赋初值时,最后有一 个元素其值为‘\0’。为了使处理方法一致,在字符 数组中也常常人为地加上一个值为‘\0’的元素。
节字符数组和字符串类型.ppt
![节字符数组和字符串类型.ppt](https://img.taocdn.com/s3/m/b5e9033b5ef7ba0d4b733b4a.png)
a数组共有10个元素组成,在内存中10个数组元素共占10个连续的存储单元。 a数组最小下标为0,最大下标9。按定义a数组所有元素都是整型变量。
三、一组数组的引用 通过给出的数组名称和这个元素在数组中的位置编号(即下标),程序可以引用这
a[5]={1,2,3,4,5} 说明: (1)在初值列表中可以写出全部数组元素的值,也可以写出部分。例如,以下方 式可以对数组进行初始化:
x[10]={0,1,2,3,4}; 该方法仅对数组的前5个元素依次进行初始化,其余值为0。 (2)对数组元素全部初始化为0,可以简写为:{}。 例如: a[5]={}; 将数组a的5个元素都初始化为0。
个数组中的任何一个元素。 一维数组元素的引用格式: 数组名[下标]
例如:若i、j都是型变量,则 a[5] a[] a[] 都是合法的元素。
说明: (1)下标可以是任意值为整型的表达式,该表达式里可以包含变量和函数调用。
引用时,下标值应在数组定义的下标值范围内。 (2)数组的精妙在于下标可以是变量,通过对下标变量值的灵活控制,达到灵
如果能像数学中使用下标变量形式表示这50个数,则问题就容易实现。在语言中,
具有下标性质的数据类型是数组。如果使用数组,上面的问题就变得十分简单、清晰。
例如,读入50个学生的成绩,只需写如下语句即可:
( 1<=50)
>>a[i];
在这里引用了带下标的变量(分量变量称为数组元素)a[i]来代替a12…50,方括号
中的i称为下标,当循环变量1时a[i]就是a[1];当2时a[i]就是a[2]……;当50时a[i]就是
字符串讲义
![字符串讲义](https://img.taocdn.com/s3/m/1ebb5541be1e650e52ea99bf.png)
字符数组和字符串1. 字符数组当数组元素的类型是字符串时,这样的数组称为字符数组,以下定义了c为字符型数组.var c:array [1…15] of char;这时可以在c 数组的每个元素内存放一个字符,c数组具有15个元素,因此可以把15个字符放入数组c中.但不允许用以下形式给c数组赋值.c=’This is a book .’而必须一个元素一个元素地赋值,例如:c[1]:=’T’;c[2]=’h’;c[3]:=’i’;c[4]:=’s’; c[5]:=’’; ……c[14]:=’k’; c[15]:=’.’;或者通过输入语句for i:=1 to 15 do read(c[i]);readln;从键盘输入一串字符,放入数组c的各元素中.2. 字符串字符串是有零个或多个字符组成的有限序列.一般记为:’c1c2……cn’ (n>= 0).其中用单引号括起来的字符序列是串的值; ci(1≤i≤n) 可以是字母,数字或字符;串中字符的数目n称为串的长度.字符串是一种特殊的数据类型,称为字符串类型.在TRUBO PASCAL中字符串类型用STRING(N)表示,N指字符串长度,N的值可在1~255之间.以下是两个字符串常量: ‘This is a string.’‘You are students.’值得一提的是,串值必须用一对单引号括起来,但单引号本身不属于串,它的作用只是为了避免与标识符混淆而已.由一个或多个空格组成的串称为空格串,它的长度为串中空格字符的个数.而用两个连着的单引号’’表示空串,空串的长度为0.串中任意个连续的字符组成的子序列称为该串的子串,包含子串的串相应地称为主串.通常称字符在序列中的序号为该字符在串中的位置.子串在主串中的位置则以子串的第一个字符在主串中的位置来表示.例如:假设a,b,c,d为如下的四个串a=’BEI’, b=’JING’c=’BEIJING’d=’BEI JING’则它们的长度分别为3,4,7和8;并且a 和b都是 c和d的子串,a在c和d中的位置都是1,而b在c中的位置是4,在d中的位置是5.定义为字符串类型的变量称为字符串变量,字符串类型与一般字符数组类型相比,有以下一些特征.(1) 字符串(常量或变量)允许进行比较运算(=,<>,>,>=,<,<=).如:‘ABCD’=’ABCD’为true‘ABCD’=’ABCE’为false等等.当且仅当长度、字符和顺序都相同时,两个字符串数据才相等.如果其中有一个不相同,则为不相等.字符串比较大小时,按字符集字符的排列顺序决定大小.(2) 字符串数据可作输入输出语句的参数.(3) 字符串变量存放字符串时,其长度可以变化,可长可短,不象数组那样必须按规定的长度输入和输出数据,字符串变量的实际长度可用length 函数测出.如:Var c:string[80];c:=’How do you do.’则 length(c)=14;实际上,字符串变量有N+1 个元素,从第一个元素开始的所有元素用于存放字符串的各个字符,第0个元素存放字符串的实际长度(以字符的形式存放), 存储方式如下:……c[0]中存放的是序号为14的字符.即ord(c[0])=length(c).(4) 字符串与字符串可以进行相加,相加结果为前后两个字符串相拼接,同时字符串的长度也相应改变,变成两个串的长度之和.如:c1=’Hello ’,c2=’world’,则c=c1+c2=‘Hello world’,且ord(c[0])=ord(c[1])+ord(c[2])字符串的处理一、字符串函数1、测长函数:length(s)功能:测出字符串s的长度。
2021年自考高级语言程序设计知识点总结:字符数组和字符串
![2021年自考高级语言程序设计知识点总结:字符数组和字符串](https://img.taocdn.com/s3/m/82d8386102d276a201292ece.png)
2021年自考高级语言程序设计知识点总结:字符数组和字符串字符数组和字符串1.字符数组如果数组的元素类型是字符型(char),则此数组就是字符数组。
字符数组的每个元素只能存放一个字符(存放字符的ASCII代码)。
字符数组的定义形式与其它数组的定义形式一样:char字符数组名[元素个数];例如,char S[5];表示数组S有五个元素,每个元素能存放一个字符,整个数组最多可存放五个字符。
字符数组元素的引用方法也与普通数组元素的引用方法相同。
字符数组也可与普通数组一样的初始化,字符数组也可利用字符串常量给字符数组初始化。
例如,char aStr[]={“12345”};并可省略花括弧,简单地写为char aStr[]=“ 12345” ;注意:字符数组aStr[]的元素有六个,不是五个。
用字符串常量对字符数组初始化,C 系统会在字符列末尾添加一个字符串结束符。
2.字符串称最后有字符率结束符’\0’的字符序列为字符串。
字符数组中存储的字符序列本身并不要求最后必然要有字符’\0’.但当字符数组内存储的内容需要作为字符串时,就必需要有标识表记标帜符’\’.当字符数组内存储的是字符串时,可用“%s”格式输出,若是普通的字符序列,则它不能用格式“%s”输出,而只能结合循环用格式“%c”输出。
指定元素个数的字符数组用字符串常量给它初始化时,其元素个数不能小于字符串常量的字符数,但数组的元素个数可以等于字符串常量的字符数。
例如,char ss[3]=“abc”;则,ss[0]=‘a’,ss[l]=‘b’,ss[2]=‘c’.此时,字符数组ss中存储的是字符序列,不是字符串。
字符率结束标识表记标帜符的代码是8位全0,称为空字符,程序用’\0’来标识表记标帜。
字符串的结束标识表记标帜符紧接在字符串的有效字符列之后。
例如,一个有8个有效字符的字符串,其长度为8个字符,但在它的第九个位置存有结束标识表记标帜符’\0’.请读者注意以下几点:(l)字符率与存储字符串的字符数组有区别。
C语言字符串替换:字符,字符串,字符数组详解
![C语言字符串替换:字符,字符串,字符数组详解](https://img.taocdn.com/s3/m/065d745568eae009581b6bd97f1922791688be35.png)
C语⾔字符串替换:字符,字符串,字符数组详解⽬录案例描述案例分析必备知识1,字符数组(1)字符数组的定义(2)字符数组的初始化2,字符串概念(1)字符串的概念(2)⽤字符初始化字符数组(3)获取字符串的长度3,字符串与指针4,字符数组与字符指针总结案例描述字符串替换是处理字符串时最常见的操作之⼀,也是学习字符串必须掌握的知识。
本案例要求通过编程实现字符串“Good moring”到“Good evening”的转换。
案例分析我们需要从字符串中被替换的位置开始,将要替换的内容逐个复制到原字符串中,直到字符串结束或者替换的字符串结束为⽌。
为了顺利完成案例,需要先学习字符数组,字符串,字符指针等基础知识。
必备知识1,字符数组字符数组是存放字符数据的数组,其中每⼀个元素都是单个字符(1)字符数组的定义字符数组定义的语法格式如下:char 数组名[常量表达式];char 数组名[常量表达式1][常量表达式2]在上述语法中,分别列举了定义⼀维字符数组和⼆维字符数组的⽅法。
⽰例代码如下:char ch[6];(2)字符数组的初始化在数组定义的同时也可以对数组中的元素进⾏赋值,这个过程称为数组的初始化,⽰例代码如下:char c[5] = {'h','e','l','l','o'};注意字符数组的初始化很简单,但要注意以下⼏点。
(1)元素个数不能多于字符数组的⼤⼩,否则编译器会出错(2)如果初始项少于数组长度,则空余元素均会被赋值为空字符(‘\0')(3)如果没有指定数组⼤⼩,则编译器会根据初始项的个数为数组分配长度(4)也可以初始化⼆维数组(和整型数组基本⼀致)2,字符串概念(1)字符串的概念字符串是由数字、字母、下划线和空格等各种字符组成的⼀串字符,是个常量,字符串的末尾都默认有⼀个'\0'作为结束符。
"abcde"" "上⾯这两⾏都是字符串,只不过第⼆个字符串中的字符都是空格字符串在各种编程语⾔中都是⾮常重要的数据类型,但是C语⾔中没有字符串的固定类型,通常⽤字符数组的形式来存储和处理字符串,这种字符数组必须以'\0'结尾。
字符数组与字符串类型
![字符数组与字符串类型](https://img.taocdn.com/s3/m/63f2bc7702768e9950e73801.png)
字符数组与字符串类型引入:NOIP2009高中组复赛第一题(密文破译)一、字符型变量:var ch :char;1、引用单个字符需加上引号,引用字符变量名不需要加引号。
例:ch:=‘a’;read(ch);Write(‘a’);Write(ch);2、多个字符的输入不能像多个数字的输入一样用空格隔开,要连续输入。
因为空格也是一个字符。
例:var a,b,c:char;Read(a,b,c);3、了解字符的ASCⅡ码(见书的附录),学习书上的相关函数(书上24页):ord和chr函数练习:做个小程序,更改英文字母的大小写。
4、明白数字1、2、3和字符‘1’、‘2’、‘3’的差别及如何转换例:把字符ch(ch在‘0’到‘9’之间)转化为相应的数字:转化:ord(ch)-ord(‘0’)二、字符数组:数组基类型(元素的类型)为字符型。
var a:array [ 1..n ] of char ;字符数组的用法与普通数值型数组一样,如输入、输出也是用循环语句逐个元素地给它赋值,即:for i:= 1 to n do read(a[ i ]);三、字符串类型:1、字符串常量:引用字符串需加上引号,引用字符串变量名不需要加引号。
我们经常在writeln语句中用到字符串,例:writeln(‘this is a book。
’) 也可以这样用:const str=‘this is a book。
’;Writeln(str);两种用法效果是一样的2、字符串变量:一般我们直接定义 var str:string;这样字符串最长可为255个字符;也可以这样定义:var str:string[ n ];其中:n为字符串最大长度,为1到255之间的整数如:var name:string[10];此外:ansistring它是一种超长字符串类型。
这种字符串的内存动态分配,这类字符串长度没有限制(可以存储多达20亿个字符!),其字符类型也是ANSIChar 类型。
字符数组和字符串数组
![字符数组和字符串数组](https://img.taocdn.com/s3/m/7783ef1c6fdb6f1aff00bed5b9f3f90f76c64dee.png)
字符数组和字符串数组demoint _tmain(int argc, _TCHAR* argv[]){char a[5] = {1,2,3,4,5}; //字符数组char b[5] = {1,2,3,4,'\0'}; //字符数组,也可以叫字符串数组;a[5]不可以叫字符串数组char c[5] = "test"; //字符数组,也可以叫字符串数组,a[5]不可以叫字符串数组int arry[5] = {10000,2147483647,2147483647,2147483647,2147483647}; //整型数组getchar();return0;}- a 0x00cffc70"烫烫烫烫烫蘆"char [5][0] 1''char[1] 2''char[2] 3''char[3] 4''char[4] 5''charstrlen(a) 18intsizeof(a) 5 unsigned int- b 0x00cffc60""char [5][0] 1''char[1] 2''char[2] 3''char[3] 4''char[4] 0charstrlen(b) 4intsizeof(b) 5 unsigned int- c 0x00cffc50"test"char [5][0] 116't'char[1] 101'e'char[2] 115's'char[3] 116't'char[4] 0charstrlen(c) 4intsizeof(c) 5 unsigned int- arry 0x00cffc34int [5][0] 10000int[1] 2147483647int[2] 2147483647int[3] 2147483647int[4] 2147483647intstrlen(arry) 2intsizeof(arry) 20 unsigned int1.字符数组的数组长度不等于数组的元素个数 从字符数组b,可以看到我们存放了5个字符,最后的⼀个字符是结束符,计算长度时并没有计算它。
编程-易语言学习-第十八课能力提高:读取网页内容加入到列表框
![编程-易语言学习-第十八课能力提高:读取网页内容加入到列表框](https://img.taocdn.com/s3/m/0ee5a2937f1922791788e84c.png)
易堂课
(第18课) 能力提高:读取网页内容加入到列表框
1.访问网页时,注意网址的书写。必须要正确
需要注意的事情
2.如果有特别长的文本,不能使用“输出调试文本”或“调试输出” 这样做的结果是文本显示不全。
3.处理网页源码时,要注意处理好空格和制表符“字符(9)”以及换行符
主讲: 精易论坛 官网:
易堂课
4.将处理好的文本数据加入到超级列表框中
主讲: 精易论坛 官网:
易堂课
(第18课) 能力提高:读取网页内容加入到列表框
开始编写程序
主讲: 精易论坛 官网:
使用模块中的命令
使用模块中的获取网页内容的相关命令来获取网页中的所 有内容 网页_访问:访问指定的地址,返回所有网页的数据
对获取到的内容进行处理和操作,取出我们需要的内容 文本_取左边。文本_取右边。文本_取中间……
分割文本:用指定的文本分割一大段文本。 返回值:文本型数组 参数1:需要分割的文本 参数2:用作分割的文本 参数3:返回数组的个数(通常不需要填写)
利用循环依次查看和处理分割好的数组:通常使用“计次循环”来依次处理数组的 所有成员
将数据加入到超级列表框中: 加入新项目:(返回当前新插入这一行的索引)超级列表框.插入项目(-1,标题...) 设置某一项的内容:超级列表框.置标题(行的索引,列的索引,内容)
(第18课) 能力提高:读取网页内容加入到列表框
主讲: 精易论坛 官网:
开始编写程序
易堂课
(第18课) 能力提高:读取网页内容加入到列表框
课后作业
多动手,多试几次重写这个程序。
主讲: 精易论坛 官网:
易堂课
(第18课) 能力提高:读取网页内容加入到列表框
c语言中的字符数组与字符串
![c语言中的字符数组与字符串](https://img.taocdn.com/s3/m/70a26daed1f34693daef3e55.png)
c语言中的字符数组与字符串一、字符数组的定义一维字符数组:用于存储和处理1个字符串,其定义格式与一维数值数组一样。
char str[20];二维字符数组:用于同时存储和处理多个字符串,其定义格式与二维数值数组一样。
char country[10][20];country[i]:第i个字符串二.字符数组的初始化字符数组的初始化.1.可以通过为每个数组元素指定初值字符来实现。
char str[10]={ 'I',' ','a','m',' ',‘h’,'a','p','p','y'};char str[ ]={"I am happy"}; 可以省略花括号,如下所示char str[ ]="I am happy";char country[10][20]={“china”,”japanese”,……};注意:上述这种字符数组的整体赋值只能在字符数组初始化时使用,不能用于字符数组的赋值,字符数组的赋值只能对其元素一一赋值,下面的赋值方法是错误的char str[15];str="I am happy";strcpy(str, "I am happy");不是用单个字符作为初值,而是用一个字符串(注意:字符串的两端是用双引号“”而不是单引号‘’括起来的)作为初值。
‘a’“a”区别三、字符数组的引用字符数组的逐个字符引用,与引用数值数组元素类似。
(1)字符数组的输入除了可以通过初始化使字符数组各元素得到初值外,也可以使用getchar()或scanf()函数输入字符。
例如:char str[10];…… for(i=0; i<10; i++){ scanf(\"%c\", &str);fflush(stdin); /*清除键盘输入缓冲区*/}……(2)字符数组的输出字符数组的输出,可以用putchar()或printf()函数。
字符数组和字符串类型
![字符数组和字符串类型](https://img.taocdn.com/s3/m/3a6f5b64b84ae45c3b358c81.png)
var
let:letter; 或: var let:array[1..26] of char;
例 按字母表顺序和逆序每隔一个字母打印。即打印出: a c e g i k m o q s u w y z x r v t p n l j h f d b
程序如下: program ex5_15; var letter:char; begin for letter:=‘a’ to ‘z’ do if(ord(letter)-ord(‘a’))mod 2=0 then write(letter:3); writeln; for letter:=‘z’ downto ‘a’ do if (ord(letter)-ord(‘z’))mod 2=0 then write(letter:3); writeln;
(2)先设第一个子串为母串,即子串1=母串1,长度为k, 则利用pos函数去检测子串1是否为公共子串,若是则结束, 否则,取子串1的两个长度为k-1,k-2…的子串, 重复上面的操作, 直到找到公共子串或长度为0的公共子串。 (3)考虑特殊情况,即仅输入一个子串的时候。
输入一行字符,包含若干个单词。约定相邻的两个单词用空格隔 开,编程统计单词的个数。
2、字符串类型 字符串常量是其值为一对撇号之间的字符序列, 但不包括撇号; 一个字符串里包含的字符个数称为字符串的长度; 当两个撇号之间不含任何字符时,称为空串,长度为0。
如:writeln(‘Input number:’); 字符串类型和字符数组类型相同点: 都靠下标引用其中的元素(字符),都可以被读写、赋值或 当作过程或函数的形参。 字符串类型和字符数组类型不同点: 字符串中的字符个数(即字符串长度)可以从0到所指出的 上限间动态变化,而数组元素的个数是固定不变的; 内存中存储的方式不同。
C语言字符数组和字符串
![C语言字符数组和字符串](https://img.taocdn.com/s3/m/faa494651611cc7931b765ce050876323112749f.png)
C语言字符数组和字符串C语言字符数组和字符串C语言对操作系统和系统使用程序以及需要对硬件进行操作的场合,用C语言明显优于其它高级语言,许多大型应用软件都是语言编写的。
那么大家知道C语言字符数组和字符串是什么呢?下面一起来看看!用来存放字符的数组称为字符数组,例如:char a[10]; //一维字符数组char b[5][10]; //二维字符数组char c[20]={'c', ' ', 'p', 'r', 'o', 'g', 'r', 'a','m'}; // 给部分数组元素赋值char d[]={'c', ' ', 'p', 'r', 'o', 'g', 'r', 'a', 'm' }; //对全体元素赋值时可以省去长度字符数组实际上是一系列字符的集合,也就是字符串(String)。
在C语言中,没有专门的'字符串变量,没有string类型,通常就用一个字符数组来存放一个字符串。
C语言规定,可以将字符串直接赋值给字符数组,例如:char str[30] = {""};char str[30] = ""; //这种形式更加简洁,实际开发中常用数组第0个元素为'c',第1个元素为'.',第2个元素为'b',后面的元素以此类推。
也可以不指定数组长度,例如:char str[] = {""};char str[] = ""; //这种形式更加简洁,实际开发中常用在C语言中,字符串总是以''作为串的结束符。
字符数组与字符串
![字符数组与字符串](https://img.taocdn.com/s3/m/ed1f0a9a9b6648d7c0c746c8.png)
8
1.3 字符串与字符数组
1、字符数组可以用字符串来初始化,例如 C语言允许用字符串的方式对数组作初始化赋值。
例如: char c[]={'C', ' ','p','r','o','g','r','a','m ', ' \0',}; 可写为: char c[]={"C program"}; 或去掉{}写为: char c[]="C program";
素为“空”('\0'),当初始化数据多于元素个数时,将出错。 例如: char c[10]={'c',' ','p','r','o','g','r','a','m'};
赋值后各元素的值为:其中c[9]未赋值,由系统自动赋予为 空字符‘\0' 值。
2
1.1 字符数组与初值化
数组在内在中的存放形式如图5-7所示:
14
1.4 字符数组的输入输出
说明: (7) C语言中,数组名代表该数组的起始地址,因此,
scanf()函数中不需要地址运算符&。 char str[13]; scanf("%s",str); scanf("%s",&str); /* 此语句是错误的 */
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
字符类型
例5.14 按字母表顺序和逆序每隔一个字母打印。即打印出: a c e g I k m o q s u w y z x r v t p n l j h f d b 【分析】程序中,我们利用了字符类型是顺序类型这一特 性,直接将字符类型变量作为循环变量,使程序处理起来 比较直观。 程序如下: program ex5_14; var letter:char; begin for letter:='a' to 'z' do if (ord(letter)-ord('a'))mod 2=0 then write(letter:3); writeln; for letter:='z' downto 'a' do if (ord(letter)-ord('z'))mod 2 =0 then write(letter:3); writeln; end.
例5.19 随机输入一个长度不超过255的字符串,将其倒置后 输出。 【分析】将字符串读入到字符串变量Letters中,这里用字 符串类型来处理,让同学们更好地掌握字符处理的函数和过 程。 程序如下: Program ex5_19; Var letters : string; i,len : integer; ch : char; begin readln(letters); len : =length(letters); for i=1 to len do begin ch : =copy(letters,len,1); delete(letters,len 1); insert(ch,letters,i); end writeln(letters); end. 运行结果 :
字符数组和字符串类型
青奥赛辅导
无论数组的下标有几个,类型如何,但数组中全体元素的类型必须相同。数 组元素的类型可以是任何类型,当它是字符型时,我们称它为字符数组。 由于字符数组与字符串类型的应用是计算机非数值处理的重要方面之一, 所以我们把它们两个放在一起进行讨论。 下面我们举例说明字符数组的应用。
例5.17 正确的邮箱地址格式是‚用户名@服务器名‛,输 入一个邮箱地址判断它是不是合法的邮箱地址。 【分析】此题的题意很简单,在判断邮箱地址合法性上需 要考虑: 1.邮箱地址字符串中是否包括字符‚@”; 2.@字符不能出现在第一个位置也不能出现字符 的末尾。 程序如下: Program ex5_17; var p : integer; s : string; begin readln(s); p := pos('@',s); if (p>1) and (p<length(s)) then writeln('ok') else writeln('error'); BA
例5.15 求输入英文句子单词的平均长度。 【分析】程序中,变量s用于存句子中英文字母的总数,变量count用于存放句 子中单词的个数,ch[j]表示ch串中的第j个位置上的字符,ord(ch[0])为ch 串的串长度。程序充分利用Free Pascal允许直接通过字符串下标得到串中的字 符这一特点,使程序比较简捷。 program ex5_15; var ch:string; // 定义ch为字符串类 s,count,j:integer; begin write('The sentence is :'); readln(ch); // 读入整行内容 s:=0; count:=0 j:=0; repeat inc(j); if not (ch[j] in [':',',',';','''','!','?','.',' ']) then inc(s); //[…]这是集合的表式 if ch[j] in[' ','.','!','?'] then inc(count); until (j=ord(ch[0])) or (ch[j] in ['.','!','?']); if ch[j]<>'.' then writeln('It is not a sentence.') else writeln('Average length is ',s/count:10:4); //结果保留二位小数 end.
例5.18 对输入的一句子实现查找且置换的功能。 【分析】程序中,输入要查找的字符串及要置换的字符串,充 分用上了字符串处理的标准过程delete、insert及标准函数 pos。 程序如下: Program ex5_18; var s1,s,o : string; i : integer; begin readln(s1); //输入原句 readln(s); //输入要查找的内容 readln(o); //输入替换的目标内容 i : =pos(s,s1); //在s1中查找s,若找不到返回0 while i<>0 do begin delete(s1,i,length(s)); //在s1中从第i位开始删 除length(s)个字符 insert(o,s1,i); //把o的内容插入s1的第i个位置 i : =pos(s,s1); end; writeln(s1); end.
字符数组和字符串类型
字符类型为由一个字符组成的字符常量或字符变量 。
字符常量定义:
const 字符常量=‘字符’ 字符变量定义: Var 字符变量:char; 字符类型是一个有序类型, 字符的大小顺序按其ASCⅡ代码的大小而定。函数succ、pred、ord适用于 字符类型。 例如:后继函数:succ(‘a’)=‘b’ 前继函数:pred(‘B’)=‘A’ 序号函数:ord(‘A’)=65
由字符串的常量、变量和运算符组成的表达式称为字符串表达式。 字符串运算符包括: 1.+:连接运算符 例如:‘Free ’+‘PASCAL’的结果是‘Free PASCAL’。 若连接的结果字符串长度超过255,则被截成255个字符。若连接后 的字符串存放在定义的字符串变量中,当其长度超过定义的字符串长度 时,超过部份字符串被截断。 例如:var str1,str2,str3:string[8]; begin str1:=‘Free ’; str2:=‘PASCAL’; str3:=str1+str2; end. 则str3的值为:‘Free PA’。 2.=、〈〉、〈、〈=、〉、〉=:关系运算符 两个字符串的比较规则为,从左到右按照ASCⅡ码值逐个比较,遇 到ASCⅡ码不等时,规定ASCⅡ码值大的字符所在的字符串为大。 例如:‘AB’〈‘AC’ 结果为真; ‘12’〈‘2’ 结果为真;
‘PASCAL ’=‘PASCAL’ 结果为假;
字符串的操作
例5.16 对给定的10个国家名,按其字母的顺序输出。 【分析】程序中,当执行到if cname[k]>cname[j]时,自 动将cname[k]串与cname[j]串中的每一个字符逐个比较, 直至遇到不等而决定其大小。这种比较方式是计算机中字 符串比较的一般方式。 程序如下: proram ex5_16; var i,j,k:integer; t:string[20]; cname:array[1..10] of string[20]; begin for i:=1 to 10 do readln(cname[i]); for i:=1 to 9 do // 选择 排序 begin k:=i; for j:=i+1 to 10 do if cname[k]>cname[j] then k:=j; t:=cname[i];cname[i]:=cname[k];cname[k]:=t; end; for i:=1 to 10 do writeln(cname[i]); end.
字符串的函数和过程 Free Pascal提供了八个标准函数和标准过程,见下表,利用这些标准函数与标准过程,一些涉及到字符串 的问题可以灵活解决。 函数和过程名 功 能 说 明 copy(s,m,n) 取s中第m个字符开始的n个字符 若m大于s的长度,则返回空串;否则,若m+n大于s的长度,则截断 length(s) 求s的动态的长度 返回值为整数 pos(sub,s) 在s中找子串sub 返回值为sub在s中的位置,为byte型 insert(sour,s,m) 在s的第m个字符位置处插入子串sour 若返回串超过255,则截断 delete(s,m,n) 删除s中第m个字符开始的n个字符串 若m大于s的长度,则不删除;否则,若m+n大于s的长度,则删除到结尾 str(x[:w[:d]],s) 将整数或实数x转换成字符串s w 和 d是整型表达式,意义同带字宽的write语句 val(s,x,code) 将字符串S 转换成整数或实数x 若S中有非法字符,则code存放非法字符在S中的下标;否则,code为零。code为 整型 upcase(ch) 将字母ch转换成大写字母 若ch不为小写字母,则不转换
字符串类型
Free Pascal中,一个字符串中的字符可以通过其对应的下 标灵活使用。 例如: var name:string; begin readln(name); for i:=1 to ord(name[0])do writeln(name[i]); //输出name串中的第i个字符 end. 语句writeln(name[i])输出name串中第i个字符。
其中:n是定义的字符串长度,必须是0~255之间的自然整数,第0号单元中存放串的实际长 度,程序运行时由系统自动提供,第1~n号单元中存放串的字符。若将string[n]写成string,则 默认n值为255。