为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

20-字符数组与字符串类型

2017-12-07 7页 doc 21KB 17阅读

用户头像

is_731942

暂无简介

举报
20-字符数组与字符串类型20-字符数组与字符串类型 字符数组与字符串类型 字符型变量:VAR CH :CHAR; 一、字符数组:数组基类型(元素的类型)为字符型。 VAR A:ARRAY [ 1((N ] OF CHAR ; 输入、输出也与普通数组一样,只能用循环结构,逐个元素地给它赋值,即: FOR I:= 1 TO N DO READ(A[ I ]); 或者: A[I]:=‘X’; 不能用:A:=‘IT IS A PEN ’; 例一:判断从键盘输入的字符串是否为回文(从左到右和从右到左读一串字符的值)是一样的, 如ABCDCBA...
20-字符数组与字符串类型
20-字符数组与字符串类型 字符数组与字符串类型 字符型变量:VAR CH :CHAR; 一、字符数组:数组基类型(元素的类型)为字符型。 VAR A:ARRAY [ 1((N ] OF CHAR ; 输入、输出也与普通数组一样,只能用循环结构,逐个元素地给它赋值,即: FOR I:= 1 TO N DO READ(A[ I ]); 或者: A[I]:=‘X’; 不能用:A:=‘IT IS A PEN ’; 例一:判断从键盘输入的字符串是否为回文(从左到右和从右到左读一串字符的值)是一样的, 如ABCDCBA,1234321,11,1),串长< 100 ,且以点号‘( ’结束。 2000年竞赛题:判断一个数是否为回文数。 VAR LETTER:ARRAY [ 1((100 ] OF CHAR ; I,J:0((100 ; CH:CHAR ; BEGIN WRITELN(‘INPUT A STRING : ’); I:= O ;READ(CH); WHILE CH < > ‘( ’ DO BEGIN I:=I+1 ; LETTER[ I ] := CH ; READ(CH); END; J:=1 ;{ I 指向数组的尾部,J指向数组的头部 ,逐个比较 } WHILE (J < I) AND (LETTER[ J ]= LETTER[ I ]) DO BEGIN I:= I – 1 ; J:=J + 1 END; IF J > = I THEN WRITELN(‘YES’) ELSE WRITELN(‘NO ’); END( 二、字符串类型:针对TURBO PASCAL 1、字符串常量:CONST STR=‘THIS IS A BOOK。’; 我们经常在WRITE语句中用到字符串,也可以WRITE(STR);语句输出STR的值。 2、字符串类型:也是一种构造类型。 定义形式:TYPE 字符串类型名 = STRING[ N ]; 其中:N为字符串最大长度, 包括空格, 其中N为1到255之间的整数 3、字符串变量: VAR 字符串变量名:字符串类型名; 如:type st = string[8]; var name:st; 也可以合并,如VAR name:STRING [8] ; 4、存储结构:类似于字符数组。画图,NAME[I]。 5、动态串:N为最大串长,但实际上可以存放0~N之间的任意个字符。为了表示具体究竟有多少 字符(实际长度),一般把下标为0的位置元素上存放实际串长。所以,字符串实际 长度为N+1。 取串长只要:ORD(NAME[0]) 三、字符串的运算 ?赋值运算:可以一次性输入/出,即作为一个整体赋值。 如:READLN(STR1); 或:STR1:=‘THIS IS A BOOK’; { 长度为 14 } WRITELN(STR1); 当然也可以逐个元素赋值,如STR1[ 3 ] :=‘I’;此时就作为字符数组用。 ?连接运算:‘+’ 如:‘THIS ’ + ‘IS’=‘THIS IS’ ‘2’+‘12’=‘212’< >‘14’ 但必须时刻注意结果不能超出字符串的长度;如:VAR A:STR[ 3 ]; B:STR[ 4 ]; C:STR[ 5 ] ;则C:=A+B;是错误的。 ?关系运算 :> < = >= <= <> 如:‘ABC’< > ‘ABCD’ 比较规则:1、当两个字符串长度不相等时,则串短的后面补空格,使长度一致; 2、再从左向右逐个 比较对应字符的ASCII值,以首次遇到的不相等字符的ASCII值大小决定两个串的大小,若所有字符的ASCII值都相等,则两个串也相等。 如: ‘12345’< ‘2’ 例二:统计一个英文句子中有多少英文单词。假设句子中字符数小于80个,单词间用至少一个空格隔开(可以有多个空格),句子头部也可以有多个空格,句子以‘*’作为结束标志。 如:‘???THIS??IS?A??GOOD???BOOK~* ’ CONST N=80 ; VAR STR:STRING[ N ]; PREC:CHAR; NUM,IINTEGER; BEGIN READLN(STR); PREC:=BLANK; NUM:=0; FOR I:=1 TO N DO BEGIN IF (STR[ I ] < > BLANK)AND(PREC=BLANK) THEN NUM:=NUM+1; PREC:=STR[ I ] END; WRITELN(‘NUM OF WORDS IS: ’,NUM:3 ); END( 引申:为什么要控制在80个字符内呢,因为屏幕25行80列,一行最多写80个字符,若多于80 个字符就要考虑一个单词的换行问题了。现上题中的小于80个这一条件去掉,即一个单词在一行 中写不完可以换到下一行接着写,若正好写完,下一行也要空格。 例三:设姓名最多有15个字符组成,其中姓氏至多5个字符,姓与名之间用空格分隔,输入若干 姓名,以‘*’结束,统计各种姓氏的个数。 :为统计所读姓名中不同姓氏的人数,首先需要 把读入的姓氏保存在一张表TABLE中,读入 ;如果没有则一个姓名时,先要到TABLE中查一下是否已有相同姓氏了,如果有只需将人数加1TABLE的长度加1,将此姓添加到表中,同时将此姓的人数置为1,重复以上过程,直到读到‘*’ 结束。 程序: CONST N=20; { N 要足够大} B5=‘?????’; VAR I,SIZE,P:INTEGER;FIND:BOOLEAN; TABLE:ARRAY[ 1((N] OF ARRAY [1((5 ] OF CHAR ; NUM:ARRAY[ ,((N] OF INTEGER; NAME:ARRAY[,((15] OF CHAR; XING:ARRAY[,((5] OF CHAR; BEGIN FOR I:= 1 TO N DO TABLE [ I ]:= B5 ; SIZE:=0; WRITELN(‘INPUT NAMES: ’);READLN(NAME); WHILE NAME [ 1 ] < > ‘*’ DO BEGIN XING:=B5;P:=1; WHILE(P < = 5)AND (NAME [ P ] < >‘?’)DO BEGIN XING [ P ]:=NAME [ P ]; P:=P+1 END; FIND:=FALSE; I:=0 ; WHILE (NOT FIND)AND(I < SIZE) DO BEGIN I:=I+1; IF TABLE [ I ] = XING THEN FIND:=TRUE END; IF FIND THEN NUM [ I ]:=NUM [ I ]+1 ELSE BEGIN SIZE:=SIZE+1; TABLE [ SIZE ]:=XING ; NUM [ SIZE ]:= 1 END; READLN(NAME); END; FOR I:= 1 TO SIZE DO IF I MOD 2 = 0 THEN WRITELN(B5,TABLE [ I ] ,NUM [ I ]:3) ELSE WRITE(TABLE [ I ],NUM [ I ] :3); WRITELN ( END 四、字符串的过程和函数(书P203) 1、函数length(str):求字符串str实际长度; 2、函数pos(str1,str2):子字符串定位,求str1串在str2中首次出现的起始位置; 3、函数copy(str,pos,num):字符串复制,求str串中从pos开始的num个连续字符; 4、函数concat(str1,str2,……strn):字符串连接。将N个字符串有序连接起来,但总的长度 不能超过255。 5、过程delete(str,pos,num):删除str串中从pos开始的num个连续字符; 6、过程insert(str1,str2,pos):将字符串str1插入到字符串str2中从pos开始的位置上; 7、过程str(value,str):将数值value转换成字符串str; 8、过程val(str,var,code):将数字字符串str转换成数值给var,若转换成功则code=0,否则code 为str中出错的首字符位置。 举例演示以上过程和函数的用法和含义。 课后练习:输入若干姓氏,排序后输出(姓氏不超过5个字符)。
/
本文档为【20-字符数组与字符串类型】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索