提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
题目
从键盘输入一行英文句子,句子中只有英文单词和空格,毎个单词之间由若干个空格隔开英文单词由大小写字母组成,编程完成下列任务:
(1)统计并输出此句子中英文字母的个数;
(2)统计并输出此句子中单词的个数;
(3)查找此句子中出现次数最多的字母(不区分大小写,大小写字母是相同的)和次数。当出现最多的字符不止一个时,都能找到,并输出找到的所有字母及次数。(输出字母时大小写均可)
例如,输入句子: This is An Pencil Case
则输出为:
字母个数:18
单词个数:5
最多的字母: i , s
出现的次数:3
代码
#include<iostream>
#include<string>
#include<map>
using namespace std;
int main(){
string s;
int totalNum=0;
int num=0;
//哈希表记录字母出现次数
map<char,int> mymap;
while(getline(cin,s)){
if(s[0]==EOF)break;
//将所有大写字母处理为小写字母
for(int i=0;i<s.length();i++){
if(s[i]>=65&&s[i]<=90){
s[i]+=32;
}
}
//遍历记录字母出现次数
for(int i=0;i<s.length();i++){
if(s[i]==' '){
totalNum++;
}else{
mymap[s[i]]+=1;
num++;
}
}
cout<<"字母个数:"<<num<<endl;
cout<<"单词个数:"<<totalNum+1<<endl;
int max=0;
char c[20] = {};
map<char,int>::iterator it;
map <char,int> ::iterator itEnd;
it = mymap.begin();
itEnd = mymap.end();
int inum=0;//字母数目
//找出最大出现次数
while (it != itEnd) {
// cout<<it->first<<' '<<it->second<<endl;
if(it->second > max){
max=it->second;
cout<<"Max:"<<max<<endl;
}
it++;
}
cout<<"最多的字母:";
it = mymap.begin();
int i=-1;
//将可能的多个字母加入c数组中
while (it != itEnd) {
if(it->second == max){
i++;
c[i]=it->first;
}
it++;
}
for(int j=0;j<=i-1;j++){
cout<<c[j]<<",";
}
cout<<c[i]<<endl;
cout<<"出现的次数:"<<max<<endl;
}
return 0;
}