字符数组和字符串_第1页
字符数组和字符串_第2页
字符数组和字符串_第3页
字符数组和字符串_第4页
字符数组和字符串_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、字符数组和字符串字符数组和字符串 主讲人:山成虎1.字符类型字符类型2.字符数组字符数组3.字符串类型字符串类型 4.字符串的操作字符串的操作 5.字符串的函数和过程字符串的函数和过程6.字符数组和字符串的区别字符数组和字符串的区别在在Pascal语言中,字符型用语言中,字符型用char作为标识符。字符型必须用单引号括起来,作为标识符。字符型必须用单引号括起来,字母作为字符型时,大小写是不等价的。字母作为字符型时,大小写是不等价的。 所有字符采用所有字符采用ASCII编码,共有编码,共有128个字符(见书个字符(见书p25表表2-8)。在程序中,通常用一对单引号将单个字符括起来表)。在程序中,

2、通常用一对单引号将单个字符括起来表示一个字符常量。如:示一个字符常量。如:a,A,0等。特殊地,对于单引号字符,则要表示等。特殊地,对于单引号字符,则要表示成成。对于。对于ASCII字符集中,按每个字符在字符集中的位置,将每个字符编字符集中,按每个字符在字符集中的位置,将每个字符编号为号为0127,编号称为对应字符的序号。例如:,编号称为对应字符的序号。例如:字符字符a的序号是的序号是97,字符,字符A的的序号是序号是65,字符,字符0的序号是的序号是48.Pascal提供的字符类操作函数有:提供的字符类操作函数有:(1)pred(前导前导),succ(后继后继)字母字母b的前导是的前导是a,

3、后继是,后继是c,即:即:pred(b)=a,succ(b)=c;Pred与与succ互逆互逆 (2)ord(取字符序号取字符序号),chr(将序号转字符)(将序号转字符)字母字母a的序号是的序号是97,序号,序号97对应的字符是对应的字符是a,即即ord(a)=97,chr(97)=a;Ord与与chr互逆互逆 (3)upcase(小写转大写小写转大写)Upcase(a)=A.1.字符类型字符类型字符常量定义字符常量定义:const字符常量字符常量=字符字符;字符类型为由一个字符组成的字符常量或字符变量字符类型为由一个字符组成的字符常量或字符变量 。 字符变量定义字符变量定义:var字符变量

4、字符变量:char;字符类型是一个有序类型字符类型是一个有序类型, , 字符的大小顺序按其字符的大小顺序按其ASCASC代码的代码的大小而定。大小而定。 例例1 按字母表顺序和逆序每隔一个字母打印。即打印出:按字母表顺序和逆序每隔一个字母打印。即打印出:a c e g I k m o q s u w yz x r v t p n l j h f d b分析:程序中,我们利用了字符类型是顺序类型这一特性,直分析:程序中,我们利用了字符类型是顺序类型这一特性,直接将字符类型变量作为循环变量,使程序处理起来比较直观。接将字符类型变量作为循环变量,使程序处理起来比较直观。program ex1;var

5、 letter:char;beginfor letter:=a to z doif (ord(letter)-ord(a)mod 2=0 then write(letter:3);writeln;for letter:=z downto a doif (ord(letter)-ord(z)mod 2 =0 then write(letter:3);writeln;end.2.字符数组字符数组当我们需要同时使用多个字符变量时,可以根据需要定义字符数组。当我们需要同时使用多个字符变量时,可以根据需要定义字符数组。字符数组定义:字符数组定义:格式一:格式一:type arr=array1.n of

6、char; a:arr;格式二:格式二:a:array1.n of char;例例2 输入一串字符输入一串字符,字符个数不超过字符个数不超过100,且以且以“.”结束。结束。 判断它判断它们是否构成回文。们是否构成回文。分析:所谓回文指从左到右和从右到左读一串字符的值是一分析:所谓回文指从左到右和从右到左读一串字符的值是一样的,如样的,如12321,ABCBA,AA12321,ABCBA,AA等。先读入要判断的一串字符(放等。先读入要判断的一串字符(放入数组入数组letterletter中),并记住这串字符的长度,然后首尾字符中),并记住这串字符的长度,然后首尾字符比较,并不断向中间靠拢,就可

7、以判断出是否为回文。比较,并不断向中间靠拢,就可以判断出是否为回文。program ex2;var letter :array1.100of char;i,j :0.100;ch :char;begin 读入一个字符串以读入一个字符串以.号结束号结束write(Input a string:);i:=0;read(ch);while ch. dobegini:=i+1;letteri:=ch;read(ch)end; 判断它是否是回文判断它是否是回文j:=1;while (j=ithen writeln(Yes.)else writeln(No.);end.3.字符串类型字符串类型 字符串是由

8、字符组成的有穷序列。字符串是由字符组成的有穷序列。字符串类型定义:字符串类型定义: type =stringn ;var字符串变量字符串变量: 字符串类型标识符字符串类型标识符;其中其中:n是定义的字符串长度是定义的字符串长度,必须是必须是0255之间的自然整数之间的自然整数,第第0号单元中存放串的号单元中存放串的实际长度实际长度,程序运行时由系统自动提供程序运行时由系统自动提供,第第1n号单元中存放串的字符号单元中存放串的字符。若将。若将stringn写成写成string,则默认,则默认n值为值为255。例如:例如:typeman=string8;line=string;varname:ma

9、n;screenline:line;另一种字符类型的定义方式为把另一种字符类型的定义方式为把类型说明的变量定义合并在一起。类型说明的变量定义合并在一起。例如:例如:var name:string8;screenline:string;例如:例如:var name:string;beginreadln(name););for i:=1 to ord(name0)dowriteln(namei););end.free pascal中,一个字符串中的字符可以通过其对应的下标灵活使用。中,一个字符串中的字符可以通过其对应的下标灵活使用。语句语句writeln(namei)输出)输出name串中第串中第

10、i个字符。个字符。 4.字符串的操作字符串的操作 (1)字符串的运算和比较)字符串的运算和比较 由字符串的常量、变量和运算符组成的表达式称为字符串表达式。由字符串的常量、变量和运算符组成的表达式称为字符串表达式。1+:连接运算符:连接运算符例如:例如:Turbo +PASCAL的结果是的结果是Turbo PASCAL。若连接的结果字符串长度超过若连接的结果字符串长度超过255,则被截成,则被截成255个字符。若连接后的字个字符。若连接后的字符串存放在定义的字符串变量中,当其长度超过定义的字符串长度时,超过符串存放在定义的字符串变量中,当其长度超过定义的字符串长度时,超过部份字符串被截断。部份字

11、符串被截断。例如:例如:varstr1,str2,str3:string8;beginstr1:=Turbo ;str2:=PASCAL;str3:=str1+str2;end则则str3的值为:的值为:Turbo PA。2=、=、=:关系运算符:关系运算符两个字符串的比较规则为,从左到右按照两个字符串的比较规则为,从左到右按照ASC码值逐个比较,遇到码值逐个比较,遇到ASC码码不等时不等时,规定规定ASC码值大的字符所在的字符串为大。码值大的字符所在的字符串为大。例如:例如:ABAC 结果为真;结果为真;122 结果为真;结果为真;PASCAL =PASCAL 结果为假;结果为假;例例3 对

12、给定的对给定的10个国家名,按其字母的顺序输出。个国家名,按其字母的顺序输出。program ex3;var i,j,k:integer;t:string20;cname:array1.10 of string20;beginfor i:=1 to 10 do readln(cnamei);for i:=1 to 9 dobegink:=i;for j:=i+1 to 10 doif cnamekcnamej then k:=j;if(ki) then begin t:=cnamei;cnamei:=cnamek;cnamek:=t; end; end;for i:=1 to 10 do wr

13、iteln(cnamei);end.分析:当执行到分析:当执行到if cnamekcnamejif cnamekcnamej时,自动将时,自动将cnamekcnamek串与串与cnamejcnamej串中的每一个字符逐个比较,直至遇到不等而决定其大小。串中的每一个字符逐个比较,直至遇到不等而决定其大小。选择排序选择排序5.字符串的函数和过程字符串的函数和过程函数和过程名函数和过程名功功 能能说说 明明copy(s,m,n)copy(s,m,n)取取s s中第中第m m个字符开个字符开始的始的n n个字符个字符若若m m大于大于s s的长度,则返回空串;否则,若的长度,则返回空串;否则,若m+n

14、m+n大于大于s s的长度,则截断的长度,则截断length(s)length(s)求求s s的动态的长度的动态的长度返回值为整数返回值为整数pos(sub,s)pos(sub,s)在在s s中找子串中找子串subsub返回值为返回值为subsub在在s s中的位置,为中的位置,为bytebyte型型insert(sour,s,m)insert(sour,s,m)在在s s的第的第m m个字符位个字符位置处插入子串置处插入子串soursour若返回串超过若返回串超过255255,则截断,则截断delete(s,m,n)delete(s,m,n)删除删除s s中第中第m m个字符个字符开始的开始

15、的n n个字符串个字符串若若m m大于大于s s的长度,则不删除;否则,若的长度,则不删除;否则,若m+nm+n大于大于s s的长度,则删除到结尾的长度,则删除到结尾Str(x:w:d,s)Str(x:w:d,s)将整数或实数将整数或实数x x转转换成字符串换成字符串s sw w 和和 d d是整型表达式,意义同带字宽的是整型表达式,意义同带字宽的writewrite语句语句val(s,x,code)val(s,x,code)将字符串将字符串S S 转换成转换成整数或实数整数或实数x x若若S S中有非法字符,则中有非法字符,则codecode存放非法字符在存放非法字符在S S中的下标;否则,

16、中的下标;否则,codecode为零。为零。codecode为整型为整型upcase(ch)upcase(ch)将字母将字母chch转换成大转换成大写字母写字母若若chch不为小写字母,则不转换不为小写字母,则不转换例例4 正确的邮箱地址格式是正确的邮箱地址格式是“用户名用户名服务器名服务器名”,输入一个邮箱地址判断它是,输入一个邮箱地址判断它是不是合法的邮箱地址。不是合法的邮箱地址。分析分析:此题的题意很简单,在判断邮箱地址合法性上需要考虑:此题的题意很简单,在判断邮箱地址合法性上需要考虑: 1邮箱地址字符串中是否包括字符邮箱地址字符串中是否包括字符“”; 2字符不能出现在第一个位置也不能出

17、现字符的末尾。字符不能出现在第一个位置也不能出现字符的末尾。program ex4;var p : integer; s : string;begin readln(s); p := pos(,s); if (p1) and (plength(s) then writeln(ok) else writeln(error);end.例例 4 实现查找与替换的功能,输入原句、查找及替换的字符串。实现查找与替换的功能,输入原句、查找及替换的字符串。分析:查找功能利用分析:查找功能利用pos函数,替换功能是先把原内容删除(函数,替换功能是先把原内容删除(delete(s,m,n)),),再插入新的内容

18、(再插入新的内容(insert(sour,s,m))。)。program ex5;var s0,s1,s2:string;i:integer;begin readln(s0);readln(s1);readln(s2);/依次输入原句、查找内容、替换的目标内容依次输入原句、查找内容、替换的目标内容i:=pos(s1,s0); /在在s0中查找中查找s1,找不到返回找不到返回0while i0 do /i=0说明没有找到查找内容,不循环说明没有找到查找内容,不循环begin delete(s0,i,length(s1); /在在s0中从第中从第i个位开始删除个位开始删除length(s1)个字符个字符 insert(s2,s0,i); /把把s2的内容插入的内容插入s0的第的第i个位置个位置 i:=pos(s1,s0);end;writeln(s0);end.6.字符数组和字符串的区别字符数组和字符串的区别(1)字符数组是一般的数组,是我们定义的数据类型,字符串类型是系统)字符数组是一般的数组,是我们定义的数据类型,字符串类型是系统定义的类型,我们可以认为字符串是系统定义的字符数组;定义的类型,我们可以认为字符串是系统定义的字符数组;(2)字符数组不能整体读入和输出,必须单个元素操作,字符串可以整体)字符数组不能整体读入和输出,必须单个元素操作,字符串可以整体读入和输

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论