主题:字符串的题目有些不懂哈
chenzhong
[专家分:250] 发布于 2005-08-31 19:01:00
本人对字符串处理不太清楚,希望大家说说字符串的处理方式
有几道题目:
1.输入10个字符串,长度在20..50之间.检查每个字符串,若遇到字母A就在其后插入一个空格,最后打印全部处理后的字符串,并统计26个字母各出现多少次.
2.有一段文字由若干字母组成.检查文字中每个字母出现的次数,输出时,按字母出现的频率的降序排列,并按以下格式打印(不含未出现字母).
字母 频率 百分比
. . .
. . .
3.读入一行文本,包含若干个单词(以空格间隔,百分号结尾).将其中以A开头的单词与以N结尾的单词,用头尾交换的方法予以置换.
回复列表 (共6个回复)
沙发
lzl1403 [专家分:1670] 发布于 2005-09-03 16:58:00
1、读字符串后逐个字符检测就行了
给一个简略一点的程序:
其中a为记录各个字母出现次数的数组,s为字符串
readln(s);
i:=1;
repeat
if (s[i]='A')or(s[i]='a')
then begin
insert(' ',s,i);
inc(i);
inc(a[1]);
end;
if s[i] in 'a'..'z'
then inc(a[ord(s[i])-96]);
if s[i] in 'A'..'Z'
then inc(a[ord(s[i])-64]);
inc(i);
until i>length(s);
writeln(s);
for i:=1 to 26 do
writeln(chr(i+96),' ',a[i]);
板凳
lzl1403 [专家分:1670] 发布于 2005-09-03 17:04:00
2、这题和上面那题第二个问差不多的处理方法吧:
看看这个程序:
while not eof do
begin
read(ch);
if ch in 'a'..'z'
then inc(a[ord(s[i])-96]);
if ch in 'A'..'Z'
then inc(a[ord(s[i])-64]);
end;
for i:=1 to 26 do
b[i]:=chr(i+96);
for i:=1 to 25 do
for j:=i+1 to 26 do
if a[i]<a[j]
then begin
t1:=a[i];
a[i]:=a[j];
a[j]:=t1;
ch:=b[i];
b[i]:=b[j];
b[j]:=ch;
end;
for i:=1 to 26 do
total:=total+a[i];
for i:=1 to 26 do
if a[i]<>0
then begin
writeln(b[i],' ',a[i],' ',a[i]/total);
end;
3 楼
lzl1403 [专家分:1670] 发布于 2005-09-03 17:05:00
3、不是很明白怎样置换,楼主再解释一下
4 楼
chenzhong [专家分:250] 发布于 2005-09-03 19:31:00
偶也不是很清楚哈[em18]
5 楼
lzl1403 [专家分:1670] 发布于 2005-09-03 22:16:00
第三题意思是不是由左往右找第一个以a开头的词,再由右往左找第一个以n结尾的词,再把两个单词交换,然后重复上述步骤……
如果是的话也比较好编吧!
6 楼
chenzhong [专家分:250] 发布于 2005-09-11 10:58:00
应该是这样把
我来回复