[整理版]字符数组与字符串类型
字符数组与字符串类型
引入: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?码(见
书
关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf
的附录),
学习书上的相关函数(书上24页):ord和chr函数
练习:做个小程序,更改英文字母的大小写。
、2、3和字符‘1’、‘2’、‘3’的差别及如何转换4、明白数字1
例:把字符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 类型。当我们对变量进行赋值的时候,AnsiString会根据赋值字符串的大小决定空间的大小,比如:
AnsiString str = "111111";
那么,这个空间现在就是7个字节。如果下一次你又另外的赋值:
str = "1111111111";
那么现在空间就是11个字节,空间大小发生了变化
3、存储结构:类似于字符数组。
字符串非空时,也可以像字符数组一样引用某一个字符:name[i]。
注意:字符串如果为空时,不能引用s[i]赋值,此时可以用连接运算“+”来把每
个字符连接起来得到s的新值:s:=s+ch.
四、字符串的运算
?赋值运算:可以一次性输入输出,即作为一个整体赋值。
如:readln(str1);
或:str1:=‘this is a book’; { 长度为 14 }
writeln(str1);
当然也可以逐个元素赋值,如str1[ 3 ] :=‘i’;此时就作为字符数组用。
?连接运算:‘+’
如:‘this ’ + ‘is’=‘this is’
‘2’+‘12’=‘212’(< >‘14’)
但必须注意结果不能超出字符串的长度;
?关系运算 :> < = >= <= <>
如:‘abc’< > ‘abcd’
比较规则:
1、字符的大小顺序按字母顺序决定;(‘ a’<’b’) 2、当两个字符串长度不相等时,则串短的后面自动补空格,使长度一致;
3、再从左向右逐个 比较对应字符的ASCII值,以首次遇到的不相等字符的ASCII值大小决定两个串的大小,若所有字符的ASCII值都相等,则两个串也相等。
如: ‘12345’< ‘2’
例一:统计一个英文句子中有多少英文单词。假设句子中字符数小于80个,单词间用至少一个空格隔开(可以有多个空格),句子头部也可以有多个空格,句子以‘*’作为结束标志。
如:‘???this??is?a??good???book~* ’
程序如下:
var s:string; i,l,t:integer;
begin
readln(s);
s:=' '+s;
l:=length(s);
t:=0;
for i:= 1 to l do
if (s[i]=' ')and(s[i+1]<>' ') then inc(t);
writeln(t);
readln;
end.
例二:回文数:判断从键盘输入的字符串是否为回文数(从左到右和从右到左读
一串字符的值是一样的),如abcdcba,1234321,11,1,串长< 100。
五、字符串的过程和函数
操作 类型 作用 返回值 例子
s:='123456789'; 求字符串 length(s) 函数 整型 l:=length(s);{l 的值为 9} s的长度
复制 s中s:='123456789'; copy ( s,w,k) 函数 从 w开始字符串 s1:=copy(s,3,5);{s1 的值是 '34567'} 的 k位
求字符 cS := ' 123.5'; 在 s中的Pos(c, S) 函数 整型 i :=Pos(' ', S);{i 的值为 1} 位置
var s:string;k:integer; 将字符串 begin val(s,k) 过程 s转为数s:='1234'; 值,存在 kval(s,k);
中; write(k);{k=1234}
将数值 ii:=1234;
转为字符str(i,s); str(i,s) 过程
串 s write(s);{s='1234'}
在 s中删s := 'Honest Abe Lincoln'; 除从第 wDelete(s,8,4); Delete(s,w,k) 过程 位开始的 Writeln(s); { 'Honest Lincoln' } k个字符
S := 'Honest Lincoln'; 将 s1插
Insert('Abe ', S, 8); 到 s中第 Insert(s1, S, w) 过程
w位 { 'Honest Abe Lincoln' } 注:函数的结果是一个值,需要赋值给某个变量,而过程是一条语句,独立使用
即可。
复制 s中s:='123456789'; 从 w开始copy ( s,w,k) 函数 字符串 s1:=copy(s,3,5);{s1 的值是 '34567'} 的 k位
求字符 cS := ' 123.5'; Pos(c, S) 函数 在 s中的整型 i :=Pos(' ', S);{i 的值为 1} 位置
例三:求两个字符串的最长公共子串。
例输入: hbcd
abcdef
输出: bcd
Readln(s);
程序如下:
Var s1,s2,s:string;
Begin
Readln(s1);
Readln(s2);
L:=length(s1);
If length(s2)
0) do
begin
for i:=1 to l+1-t do{i+t=l+1}
begin
s:=copy(s1,I,t)
x:=pos(s,s2)
if x<>0 then begin f:=true;write(s); end;
end;
t:=t-1;
end;
end.
思考:如果公共子串不止一个或者不存在该怎么办,
课后练习:
1、读入一串字符,以句号结束,然后让其倒序输出。
如输入:I am a student.
输出:tneduts a ma I
2、读入一串数字(不超过255个),以句号结束,请统计其中‘0’到‘9’的各个数字的个数。(提示:字符可以做数组元素的下标)
如输入:91254782354987012345978.
输出:0:1 1:2 2:3 3:2 4:3 5:3 7:3 8:3 9:3
3、字符串函数与过程练习:
注意:函数不能作为一个语句独立使用,一般是要把函数值复制给某个变量;
过程相当于一条语句,一定要独立使用。
要求如下:
1、键盘读入字符串s:abcdefghijklmn
2、计算输出s的长度
3、用copy求子串函数来截取子串s1:‘cdefg’,输出s1
4、求s1在s中的位置并输出
5、用delete过程删除s中的‘cdefg’,输出s
6、用insert过程把s1插入到s中的第三个位置,输出s
4(字符移除
将字符串中的大写字母按照字典序从大到小依次移除。每次移除一种大写字母,如果这个
大写字母出现多次,则一并移除。字符串长度不超过80,只有大小写字母,没有其他字符(也
没有空格)。
例如:
'theRainInSpainFallsMainlyOnThePlain': theRainInSpainFallsMainlyOnhePlain<--第一次移除所有的T theRainInpainFallsMainlyOnhePlain <-- 移除所有的S theainInpainFallsMainlyOnhePlain <-- 移除所有的R theainInpainFallsMainlyOnhelain <-- 移除所有的P theainInpainFallsMainlynhelain <-- 移除所有的O theainInpainFallsainlynhelain <-- 移除所有的M theainnpainFallsainlynhelain <-- 移除所有的I theainnpainallsainlynhelain <-- 移除所有的F 输入:camel.in
一个字符串。
输出:camel.out
每一次移除字母后的结果,一行输出一个字符串。 样例:
输入
theRainInSpainFallsMainlyOnThePlain
输出:
theRainInSpainFallsMainlyOnhePlain
theRainInpainFallsMainlyOnhePlain
theainInpainFallsMainlyOnhePlain
theainInpainFallsMainlyOnhelain
theainInpainFallsMainlynhelain
theainInpainFallsainlynhelain
theainnpainFallsainlynhelain
theainnpainallsainlynhelain