本题要输出字母和对应出现的次数,所以我们定义一个字符数组,用来存储26个字母,再定义一个整型数组,用来存储字母出现的次数。
注意本题中的文段包含空格和换行符,我们采用scanf进行循环输入,当遇到#时我们终止输入(注意这里最好不使用string类型,因为无论是cin形式还是getline形式输入,都无法获取换行符)。
for(i=0;;i++)
{
scanf("%c",&se[i]);
if(se[i]=='#')
break;
}
se[i+1]='\0';
同时我们注意到,s[i]是#,则我们将s[i]的后一位赋值为\0。
最后我们将文章进行依次检索,当对应到某个字母时,则字母相应的计数值加一。
#include<iostream>
#include<string>
#include<cstring>
#include<cstdio>
using namespace std;
int main()
{
char k[26];
int s[26];
int i,j;
for(i=0;i<26;i++)
{
k[i]=97+i;
}
for(i=0;i<26;i++)
{
s[i]=0;
}
char se[1000000];
for(i=0;;i++)
{
scanf("%c",&se[i]);
if(se[i]=='#')
break;
}
se[i+1]='\0';
int t=strlen(se);
for(i=0;i<t;i++)
{
for(j=0;j<26;j++)
{
if(se[i]==k[j])
{
s[j]++;
}
}
}
for(i=0;i<26;i++)
{
cout<<k[i]<<" "<<s[i]<<endl;
}
}