失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 2.26 统计字符串字母 单词个数 并找出出现最多次数字母

2.26 统计字符串字母 单词个数 并找出出现最多次数字母

时间:2024-05-22 15:23:43

相关推荐

2.26 统计字符串字母 单词个数 并找出出现最多次数字母

题目描述:

从键盘输入一行英文句子,句子中只有英文单词和空格,每个单词之间由若干个空格隔开, 英文单词由大小写字母组成,编程完成下列任务:

(1)统计并输出此句子中英文字母的个数; (10 分)

(2)统计并输出此句子中单词的个数; (10 分)

(3)查找此句子中出现次数最多的字母(不区分大小写,大小写字母是相同的)和次数。 当出现最多的字符不止一个时,都能找到,并输出找到的所有字母及次数。(输出字母时大小写 均可) (20 分)

例如:

输入

This is An Pencil Case

输出

字母个数:18

单词个数:5

最多的字母:i,s

出现的次数:3

这题有一个地方我开始没看到,就是不区分大小写,这就使我开始写的代码在统计时区分了大小写,既然如此,就分别考虑,两种情况吧!

当不区分大小写时:

1.我用的vector容器,自定义一个Record结构体,记录字符c和次数num

2.用暴力的方法,从头开始扫描,每扫描一个单词,就进入二层循环,扫描后面的单词是否有相同的,相同计数加1,且标记为‘#’,代表已经扫描,后面再遇到时就跳过

代码:

typedef struct Record{char c;int num;Record(char a,int b):c(a),num(b){}}Record;int main(){string s;getline(cin,s);vector<Record> vec;int whitenum=0;int letternum=0;int iflastwhite=1;for(int i=0;i<s.length();i++){if(s[i]==' '){whitenum++;iflastwhite=1;}else if(s[i]=='#'){if(iflastwhite==1){letternum++;iflastwhite=0;}continue;}else{if(iflastwhite==1){letternum++;iflastwhite=0;}int sum=1;for(int j=i+1;j<s.length();j++){if(s[j]!='#'&&s[j]!=' '&&s[i]==s[j]){sum++;s[j]='#';}}Record rec(s[i],sum);vec.push_back(rec);}}int maxnum=0;for(int i=0;i<vec.size();i++){if(vec[i].num>maxnum){maxnum=vec[i].num;}}cout<<"字母个数:"<<letternum<<endl;cout<<"单词个数:"<<s.length()-whitenum<<endl;cout<<"出现最多的字母:";int j=0;while(vec[j].num!=maxnum) j++;cout<<vec[j].c;for(int i=j+1;i<vec.size();i++){if(vec[i].num==maxnum){cout<<","<<vec[i].c;}}cout<<endl;cout<<"出现最多的次数:"<<maxnum;}

当不区分大小写时:

很明显我上面的方法已经没有用了,于是改成了依据字母的ASCII码值存储数据

1.定义一个数组num[26],用字母的顺序来存储

2.扫描每个字母,分别是对应的下标加1

int main(){string s;getline(cin,s);int num[26]={0};int whitenum=0;int letternum=0;int iflastwhite=1;for(int i=0;i<s.size();i++){if(s[i]==' '){whitenum++;iflastwhite=1;}else{if(iflastwhite==1){letternum++;iflastwhite=0;}int index=s[i]>='a'?s[i]-'a':s[i]-'A';num[index]++;}}int maxnum=0;for(int i=0;i<26;i++){if(num[i]>maxnum){maxnum=num[i];}}cout<<"字母个数:"<<letternum<<endl;cout<<"单词个数:"<<s.length()-whitenum<<endl;cout<<"出现最多的字母:";int j=0;while(num[j]!=maxnum) j++;cout<<char('a'+j);for(int i=j+1;i<26;i++){if(num[i]==maxnum){cout<<','<<char(i+'a');}}cout<<endl;cout<<"出现最多的次数:"<<maxnum;}

小结:

审题一定要认真的,复试的时候可不能出差错

如果觉得《2.26 统计字符串字母 单词个数 并找出出现最多次数字母》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。