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; }