题目描述
从键盘输入一行英文句子,句子中只有英文单词和空格,每个单词之间用若个空格隔开,英文单词由大小写字母组成,编程完成以下任务:
1.统计并输出此句子中英文字母的个数;
2.统计并输出此句子中单词的个数;
3.查找此句子中出现次数最多的字母(不区分大小写,大小写字母是相同的)及次数。当出现最多的字母不止一个时,全部找到,并输出找到的所有字母及次数。(输出顺序按字母顺序,且输出时字母全部小写)
输入格式
一行字符串。仅有空格和英文字母构成。
输出格式
第一行输出此句子中英文字母的个数。
第二行输出此句子中单词的个数。
第三行输出出现最多的字母,不止一个时,按字母顺序逐个输出,空格隔开。
第四行输出出现最多的字母的出现次数。
数据范围
输入字符串长度不超过 1000。
样例
输入样例:
This is An Pencil Case
输出样例:
18
5
i s
3
C++ 代码
写法一:输入字符串不包含前导空格和后导空格
#include<iostream>
using namespace std;
const int N=30;
int c[N]; // 统计字母a~z的次数
int main()
{
string a;
getline(cin,a);
int n=a.size(),cnt=a.size(),count=1;
// n表示输入字符串长度,cnt字母个数,count单词个数
for(int i=0;i<n;i++)
{
if(a[i]==' ') cnt--; // 如果是空格字母减一
if(a[i]>='a' && a[i]<='z') c[a[i]-'a']++; // 统计小写个数
if(a[i]>='A' && a[i]<='Z') c[a[i]-'A']++; // 统计大写个数
if(a[i]==' ' && a[i+1]!=' ') count++; // 如果是空格,单词数加一
}
cout<<cnt<<endl; // 输出字母个数
cout<<count<<endl; // 输出单词个数
int max=-1;
for(int i=0;i<26;i++) // 统计字母出现次数最多的
if(c[i]>max)
max=c[i];
for(int i=0;i<26;i++) // 输出字母出现次数最多的字母
if(c[i]==max)
cout<<(char)('a'+i)<<' ';
cout<<endl<<max<<endl; // 输出字母出现最大次数
return 0;
}
写法二:输入字符串包含前导空格和后导空格
#include<iostream>
using namespace std;
const int N=30;
int c[N]; // 统计字母a~z的次数
int main()
{
string a;
getline(cin,a);
int n=a.size(),cnt=a.size(),count=0;
bool check=false; // 早到第一个不是空格的字母
// n表示输入字符串长度,cnt字母个数,count单词个数
for(int i=0;i<n;i++)
{
if(a[i]==' ') cnt--; // 如果是空格字母减一
if(a[i]>='a' && a[i]<='z') c[a[i]-'a']++; // 统计小写a~z个数
if(a[i]>='A' && a[i]<='Z') c[a[i]-'A']++; // 统计大写A~Z个数
if(a[i]!=' ' && check==false) // 去掉前面空格
{
check=true;
count++; // 当遇到第一个字符不是空格,单词个数加一
}
if(check && a[i]==' ' && a[i+1]!=' ' && i+1<n) count++;
// 如果是空格并且后面字符不是空格并且后一个字符位置小于n,单词数加一
}
cout<<cnt<<endl; // 输出字母个数
cout<<count<<endl; // 输出单词个数
int max=-1;
for(int i=0;i<26;i++) // 统计字母出现次数最多的
if(c[i]>max)
max=c[i];
for(int i=0;i<26;i++) // 输出字母出现次数最多的字母
if(c[i]==max)
cout<<(char)('a'+i)<<' ';
cout<<endl<<max<<endl; // 输出字母出现最大次数
return 0;
}