回 帖 发 新 帖 刷新版面

主题:字符串的题目有些不懂哈

本人对字符串处理不太清楚,希望大家说说字符串的处理方式
有几道题目:
1.输入10个字符串,长度在20..50之间.检查每个字符串,若遇到字母A就在其后插入一个空格,最后打印全部处理后的字符串,并统计26个字母各出现多少次.
2.有一段文字由若干字母组成.检查文字中每个字母出现的次数,输出时,按字母出现的频率的降序排列,并按以下格式打印(不含未出现字母).
     字母       频率     百分比
       .          .         .
       .          .         .
3.读入一行文本,包含若干个单词(以空格间隔,百分号结尾).将其中以A开头的单词与以N结尾的单词,用头尾交换的方法予以置换.

回复列表 (共6个回复)

沙发

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]);

板凳

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 楼

3、不是很明白怎样置换,楼主再解释一下

4 楼

偶也不是很清楚哈[em18]

5 楼

第三题意思是不是由左往右找第一个以a开头的词,再由右往左找第一个以n结尾的词,再把两个单词交换,然后重复上述步骤……
如果是的话也比较好编吧!

6 楼

应该是这样把

我来回复

您尚未登录,请登录后再回复。点此登录或注册