作业帮 > 综合 > 作业

1317:【数组字符练习】7

来源:学生作业帮 编辑:拍题作业网作业帮 分类:综合作业 时间:2024/05/07 17:33:49
1317:【数组字符练习】7
时间限制:1 Sec 内存限制:128 MB
提交:105 解决:41
[提交][状态][讨论版]
读入一英文句子,单词之间用空格或逗号隔开,统计其中单词个数,并输出各个字母出现的频率.(句子末尾不一定用"."结束)
输入
输入文件word.in只有一行,内容为一行英文句子,英文句子的长度不超过100个字符,单词间由空格或逗号隔开.
输出
输出文件word.out第一行输出单词个数n,第二行开始每行表示一个字母出现的次数,未出现的字母不输出统计结果.
样例输入 Copy
abc abc abc,abc ,abc ,
样例输出 Copy
5
a 5
b 5
c 5
提示
来源
[提交][状态][讨论版]
下面的程序假定英语句子只由小写字母和空格、标点组成:
var a:array['a'..'z']of integer;
s:string; i,w:integer; c:char;
begin
readln(s); w:=0;
for i:=2 to length(s) do
begin
if (s[i]=' ')and(s[i-1] in ['a'..'z'])then inc(w);
if s[i] in ['a'..'z'] then inc(a[s[i]]);
end;
if s[length(s)] in ['a'..'z'] then inc(w);
writeln(w);
for c:='a' to 'z' do
if a[c]>0 then writeln(c,' ',a[c]);
end.
再问: 不对啊,输入abc abc   abc, abc    , abc ,a应该是5,总共也应该是5,但输出的是
再答: 修改一下,这回没问题了: var a:array['a'..'z']of integer; s:string; i,w:integer; c:char; begin readln(s); w:=0; for i:=2 to length(s) do begin if (not (s[i] in ['a'..'z']))and(s[i-1] in ['a'..'z'])then inc(w); if s[i] in ['a'..'z'] then inc(a[s[i]]); end; if s[length(s)] in ['a'..'z'] then inc(w); writeln(w); for c:='a' to 'z' do if a[c]>0 then writeln(c,' ',a[c]); end.