字符数组与字符串.doc_第1页
字符数组与字符串.doc_第2页
字符数组与字符串.doc_第3页
字符数组与字符串.doc_第4页
字符数组与字符串.doc_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

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

文档简介

字符数组与字符串hb007 发表于 2006-4-1 9:00:25一、字符类型字符类型是由一个字符组成的字符常量或字符变量。字符常量定义:const字符常量=字符;字符变量定义:Var字符变量:char;字符类型是一个有序类型, 字符的大小顺序按其ASC代码的大小而定。函数succ、pred、ord适用于字符类型。后继函数:succ(x)函数值为x+1,例如:succ(a)=b、succ(15)=16、succ(-114)=-113前继函数:pred(x)函数值为x-1,例如:pred(B)=A、pred(6)=5、pred(-21)=-22序号函数:ord(ch)给出字符ch在ASCII字符集中的序号,结果为整型。例如:ord(A)=65。注意ord(7)7,正确的是:ord(7)=ord(0)+7=48+7=55。且ord(false)=0,ord(true)=1。【例901】按字母表顺序和逆序每隔一个字母打印。即打印出: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 ex901;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; readlnend.分析:程序中,我们利用了字符类型是顺序类型这一特性,直接将字符类型变量作为循环变量,使程序处理起来比较直观。二、字符数组无论数组的下标有几个,类型如何,但数组元素的类型必须相同。数组元素的类型可以是任何类型,当它是字符型时,我们称它为字符数组。【例902】在一个字符数组let中形成由A开始的连续26个大写字母构成的字串,并将其倒置后仍放在let中。program ex902;type letter=array1.26 of char;var let:letter; ch:char; i:integer;begin for i:=1 to 26 do begin leti:=chr(i+64); write(leti); end;writeln; for i:=1 to 13 do begin ch:=leti; leti:=let26-i+1; let26-i+1:=ch; end; for i:=1 to 26 do write(leti); writeln; readlnend.字符函数:chr(x),函数的值是序号(x)的ASCII字符,属于字符型。例如:chr(65)=A chr(32)= 前面介绍的序号函数ord(ch)是chr(x)的逆函数。例如:chr(55)=7 chr(ord(A)=A因此,有以下两个恒等式:chr(ord(ch)=ch ord(chr(n)=n其中,ch是字符型变量,n是整型变量。三、字符串类型字符串是由字符组成的有穷序列。在write(writeln)过程语句中,为了输出提示字符已多次使用过字符串常量。例如:Input number:,calculste shadow area:就是两个字符串常量。字符串常量是其值为一对撇号之间的字符序列,但不包括撇号。一个字符串里包含的字符个数称为字符串的长度。例如上面第一个串长度是13(含空格字符),第二个串长是22。当两个撇号之间不含任何字符时,称为空串。空串的长度为0。空串和任何字符串变量类型相容,并可作为初始值赋给任何一个字符串变量。字符串类型定义:type字符串类型标识符=stringn;var字符串变量:字符串类型标识符;其中:n是定义的字符串长度,必须是0255之间的自然整数,第0号单元中存放串的实际长度,程序运行时由系统自动提供,第1n号单元中存放串的字符。若将stringn写成string,则默认n值为255。例如:type man=string8;line=string;varname:man;screenline:line;另一种字符串的定义方式为把类型说明和变量定义合并在一起。例如:var name:string8; screenline:string;字符串变量在内存中所占的空间是它的最大长度加1个字节。第一个字节用来存放所给字符串变量的实际有效长度,可用零下标去访问。例如,对上述说明的name字符串变量,ord(name0)即指出了name字符串中实际字符的个数。Turbo Pascal中,字符串变量为其中每个字符都规定了相应的下标,一个字符串中的字符可以通过其对应的下标灵活使用。例如:var i:integer; name:string;beginreadln(name);for i:=1 to ord(name0) dowriteln(namei);end.语句writeln(namei)输出name串中第i个字符。【例903】求输入英文句子单词的平均长度。【分析】程序中,变量s用于存句子中英文字母的总数,变量count用于存放句子中单词的个数,chj表示ch串中的第j个位置上的字符,ord(ch0)为ch串的串长度。程序充分利用Turbo Pascal允许直接通过字符串下标得到串中的字符这一特点,使程序比较简捷。程序如下:program ex903;varch:string;s,count,j:integer;beginwrite(The sentence is:);readln(ch);s:=0;count:=0;j:=0;repeatinc(j);if not(chj in :,;,!,?,., ) then inc(s);if chj in:,;,!,?,., then inc(count);until (j=ord(ch0)or(chj in .,!,?);if chj. then writeln(It is not a sentence.)else writeln(Average length is ,s/count:10:4);end.in为集合运算符“属于”,结果为布尔值。在pascal语言中,inc(s)应该是给变量增加1,相当于s=s+1;dec(s)是给变量减1,相当于s=s-1;是pascal提供的两个标准过程。四、字符串运算由字符串的常量、变量和运算符组成的表达式称为字符串表达式。字符串运算符包括:1、连接运算符:+例如:Turbo +PASCAL的结果是Turbo PASCAL。若连接的结果字符串长度超过255,则被截成255个字符。若连接后的字符串存放在定义的字符串变量中,当其长度超过定义的字符串长度时,超过部份字符串被截断。例如:var str1,str2,str3:string8;beginstr1:=Turbo ;str2:=PASCAL; str3:=str1+str2;end则str3的值为:Turbo PA。2、关系运算符:=、=两个字符串的比较规则为,从左到右按照ASC码值逐个比较,遇到ASC码不等时,规定ASC码值大的字符所在的字符串为大。例如:ABAC 结果为真;12cnamej then k:=j;t:=cnamei;cnamei:=cnamek;cnamek:=t; end; for i:=1 to 10 do writeln(cnamei);end.分析:程序中,当执行到if cnamekcnamej时,自动将cnamek串与cnamej串中的每一个字符逐个比较,直至遇到不等而决定其大小。这种比较方式是计算机中字符串比较的一般方式。三、字符串的函数和过程Turbo Pascal提供了八个标准函数和标准过程,利用这些标准函数与标准过程,一些涉及到字符串的问题可以灵活解决。1、delete过程格式:delete(s,m,n)功能:删除s中第m个字符开始的n个字符串。若m大于s的长度,则不删除;否则,若m+n大于s的长度,则删除到结尾。其中s是字符串变量,m和n是整型表达式。2、str过程格式:str(x:w:d,s)功能:将整数或实数x转换成字符串s。w和d是整型表达式,意义同带字宽的write语句。例如:i值为12345,那么str(i:6,st)使st值变为,12345,而x的值为3.14E4时,那么str(x:10:0,st)使st值变为31400。3、val过程格式:val(s,x,code)功能:将字符串s转换成整数或实数x。若s中有非法字符,则code存放非法字符在s中的下标;否则,code为零。code为整型。如果没在检查出错误,变量code置为0,否则置为第一个出错字符位置,同时转换结果值无意义。4、insert过程格式:insert(sour,s,m)功能:在s的第m个字符位置处插入子串sour。若返回串超过255,则截断。其中sour是一个字符串表达式,s是一个字符串变量,m是整型表达式。5、copy函数格式:copy(s,m,n)功能:取s中第m个字符开始的n个字符。若m大于s的长度,则返回空串;否则,若m+n大于s的长度,则截断。其中s是一个字符串表达式,m和n是整型表达式。6、length函数格式:length(s)功能:求字符串s的长度,返回值为整数。7、pos函数格式:pos(sub,s)功能:在字符串s中找子串sub,返回值为sub在s中第一次出现的位置号,值的类型为整型。例如:st的值为See you later!,那么pos(you,st)返回值为5,pos(seek,st)返回值为0。8、concat函数格式:concat(st1,st2,stn);功能:函数concat把它所有自变量表示的字串按所给出的顺序连接起来,并返回连接后的值。自变量st1,st2,stn均是字串表达式,彼此用逗号隔开。若结果字串长度大于255,则产生运行错误。它可用连接运算符“+”代替并且更为方便。例如,st1的值为I am,st2值为student,则concat(st1,a,st2)返回I am a student。9、upcase函数格式:upcase(ch)功能:将字母ch转换成大写字母。若ch不为小写字母,则不转换。【例905】校对输入日期(以标准英语日期,月/日/年)的正确性,若输入正确则以年-月-日的方式输出。程序如下:program ex905;const max:array1.12 of byte=(31,29,31,30,31,30,31,31,30,31,30,31);var st:string; byte(字节型)数值范围 0.255带符号8位 p,w,y,m,d:integer;procedure err; begin write(Input Error!); readln; halt; end;procedure init(var x:integer); begin p:=pos(/,st); if (p=0)or(p=1)or(p3) then err; val(copy(st,1,p-1),x,w); if w0 then err; delete(st,1,p); end;begin write(The Date is:); readln(st); init(m); init(d); val(st,y,w); if not (length(st)4) or (w0) or (m12) or (dmaxm) then err; if (m=2) and (d=29) then if y mod 100=0 then begin if y mod 4000 then err; end else if y mod 40 then err; write(Date: ,y,-,m,-,d); readln;end.分析:此题的题意很简单,但在程序处理时还需考虑以下几方面的问题。1判定输入的月和日应是位或位的数字,程序中用了一个过程init,利用串函数pos,求得分隔符/所在的位置而判定输入的月和日是否为位或位,利用标准过程val判定输入的月和日是否为数字;2判定月和日是否规定的日期范围及输入的年是否正确;3若输入的月是2月份,则还需考虑闰年的情况。【例906】对输入的一句子实现查找且置换的功能。程序如下:program ex906;var s1,s,o:string;

温馨提示

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

评论

0/150

提交评论