【2033】统计字符串中的字母个数

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


 

原文地址:https://www.cnblogs.com/AWCXV/p/7632492.html