Time Limit: 20 second
Memory Limit: 20 MB
问题描述输入一串小写字母(以"."为结束标志),统计出每个小写字母在该字符串中出现的次数(若某字母不出现,则不要输出)。若输入大写字母或数字,则不计数. (类似题目如:投票问题,将候选人各对应一个字母,唱票时顺序输入,唱票结束用".",可以用这种方法统计选票,若输入其他内容,按照废票计算.)
Input
输入仅一行
输入字符串以"."结束
Output
输出统计的字母及其次数。统计结果按字母顺序显示。
Sample Input
输入:aaaabbbccc.
Sample Output
输出:a:4 b:3 c:3 回车
【题解】
用int a[27] 来统计各个字母的出现次数。注意先找到".'的位置然后字符串是从0开始的.是否为小写字母用 >='a' <= 'z'来判断。
【代码】
#include <cstdio>
#include <iostream>
#include <string>
using namespace std;
string s1;
int a[27];
void input_data()
{
char ts[300];
cin.getline(ts,300);
s1 = string(ts); //应该是没有空格的 练习了一下 cin.getline 的用法
for (int i = 1;i <= 26;i++) //初始化各个字母出现的次数
a[i] = 0;
}
void get_ans()
{
int p = 0;
while (s1[p] != '.') p++; //先找到终止符的位置
for (int i = 0;i <= p-1;i++)
if ((s1[i] >= 'a') && (s1[i] <= 'z')) //如果这个字符是小写字母 就记录并递增数目
a[s1[i]-'a'+1]++;
}
void output_ans() //输出各个字母出现的次数。
{
for (int i = 1;i <= 26;i++)
if (a[i] > 0)
{
char t = i + 'a' -1;
cout << t << ':' << a[i] <<endl;
}
}
int main()
{
input_data();
get_ans();
output_ans();
return 0;
}