为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > pascalPascal教程10字符与字符串处理

pascalPascal教程10字符与字符串处理

2018-09-05 3页 doc 37KB 4阅读

用户头像

is_611355

暂无简介

举报
pascalPascal教程10字符与字符串处理第十课 字符与字符串处理   一、字符、字符串类型的使用   (一)字符类型   字符类型为由一个字符组成的字符常量或字符变量 。   字符常量定义:   const                                          字符常量='字符'   字符变量定义:Ⅱ   Var    字符变量:char;   字符类型是一个有序类型, 字符的大小顺序按其ASCⅡ代码的大小而定。函数succ、pred、ord适用于字符类型。   例如:后继函数:succ('a')='b'      前继函数:pred('...
pascalPascal教程10字符与字符串处理
第十课 字符与字符串处理   一、字符、字符串类型的使用   (一)字符类型   字符类型为由一个字符组成的字符常量或字符变量 。   字符常量定义:   const                                          字符常量='字符'   字符变量定义:Ⅱ   Var    字符变量:char;   字符类型是一个有序类型, 字符的大小顺序按其ASCⅡ代码的大小而定。函数succ、pred、ord适用于字符类型。   例如:后继函数:succ('a')='b'      前继函数:pred('B')='A'      序号函数:ord('A')=65   例1 按字母表顺序和逆序每隔一个字母打印。即打印出:     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 ex8_1;    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.   :程序中,我们利用了字符类型是顺序类型这一特性,直接将字符类型变量作为循环变量,使程序处理起来比较直观。   (二)字符串类型   字符串是由字符组成的有穷序列。   字符串类型定义:   type <字符串类型标识符>=string[n];   var    字符串变量: 字符串类型标识符;   其中:n是定义的字符串长度,必须是0~255之间的自然整数,第0号单元中存放串的实际长度,程序运行时由系统自动提供,第1~n号单元中存放串的字符。若将string[n]写成string,则默认n值为255。   例如:type       man=string[8];        line=string;       var        name:man;        screenline:line;   另一种字符类型的定义方式为把类型说明的变量定义合并在一起。   例如:VAR        name:STRING[8];        screenline:STRING;   Turbo Pascal中,一个字符串中的字符可以通过其对应的下标灵活使用。   例如:var       name:string;      begin       readln(nsme);       for i:=1 to ord(name[0])do        writeln(name[i]);      end.   语句writeln(name[i])输出name串中第i个字符。   例2 求输入英文单词的平均长度.   程序如下:   program ex8_2;    var     ch:string;     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.   分析:程序中,变量s用于存句子中英文字母的总数,变量count用于存放句子中单词的个数,ch[j]表示ch串中的第j个位置上的字符,ord(ch[0])为ch串的串长度。程序充分利用Turbo Pascal允许直接通过字符串下标得到串中的字符这一特点,使程序比较简捷。 二、字符串的操作   (一)字符串的运算和比较   由字符串的常量、变量和运算符组成的表达式称为字符串表达式。   字符串运算符包括:   1.+:连接运算符   例如:'Turbo '+'PASCAL'的结果是'Turbo PASCAL'。   若连接的结果字符串长度超过255,则被截成255个字符。若连接后的字符串存放在定义的字符串变量中,当其长度超过定义的字符串长度时,超过部份字符串被截断。   例如:var       str1,str2,str3:string[8];      begin       str1:='Turbo ';       str2:='PASCAL';       str3:=str1+str2;      end.   则str3的值为:'Turbo PA'。   2.=、〈〉、〈、〈=、〉、〉=:关系运算符   两个字符串的比较规则为,从左到右按照ASCⅡ码值逐个比较,遇到ASCⅡ码不等时,规定ASCⅡ码值大的字符所在的字符串为大。   例如:'AB'〈'AC' 结果为真;      '12'〈'2' 结果为真;      'PASCAL '='PASCAL' 结果为假;   例3 对给定的10个国家名,按其字母的顺序输出。   程序如下:   program ex8_3;    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.   分析:程序中,当执行到if cname[k]>cname[j]时,自动将cname[k]串与cname[j]串中的每一个字符逐个比较,直至遇到不等而决定其大小。这种比较方式是计算机中字符串比较的一般方式。 三、字符串的函数和过程   Turbo 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不为小写字母,则不转换 例4 校对输入日期(以标准英语日期,月/日/年)的正确性,若输入正确则以年.月.日的方式输出。   程序如下:   program ex8_4;    const     max:array[1..12] of byte       =(31,29,31,30,31,30,31,31,30,31,30,31);    var     st:string;    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 (p>3) then err;      val(copy(st,1,p-1),x,w);      if w<>0 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 (w<>0) or (m>12) or (d>max[m]) then err;     if (m=2) and (d=29)      then if y mod 100=0         then begin             if y mod 400<>0 then err;            end      else if y mod 4<>0 then err;     write('Date : ',y,'.',m,'.',d);     readln;    end.   分析:此题的题意很简单,但在程序处理时还需考虑以下几方面的问题。   1.判定输入的月和日应是1位或2位的数字,程序中用了一个过程inst,利用串函数pos,求得分隔符/所在的位置而判定输入的月和日是否为1位或2位,利用标准过程val判定输入的月和日是否为数字;   2.判定月和日是否规定的日期范围及输入的年是否正确;   3.若输入的月是2月份,则还需考虑闰年的情况。   例5 对输入的一句子实现查找且置换的功能。   程序如下:   program ex8_5;   var    s1,s,o:string;    i:integer;   begin    write('The text:');    readln(s1);    write('Find:');readln(s);    write('Replace:');readln(o);    i:=pos(s,s1);    while i<>0 do begin     delete(s1,i,length(s));     insert(o,s1,i);     i:=pos(s,s1);    end;    writeln(s1);    readln;   end.   分析:程序中,输入要查找的字符串及要置换的字符串,充分用上了字符串处理的标准过程delete、insert及标准函数pos。
/
本文档为【pascalPascal教程10字符与字符串处理】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索