题目描述:
从键盘输入一行英文句子,句子中只有英文单词和空格,每个单词之间由若干个空格隔开, 英文单词由大小写字母组成,编程完成下列任务:
(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 统计字符串字母 单词个数 并找出出现最多次数字母》对你有帮助,请点赞、收藏,并留下你的观点哦!