[1525]字符统计2 (哈希)SDUT



字符统计2

Time Limit: 1000ms   Memory limit: 65536K  有疑问?点这里^_^

题目描述

输入英文句子,输出该句子中除了空格外出现次数最多的字符及其出现的次数。

输入

输入数据包含多个测试实例,每个测试实例是一个长度不超过100的英文句子,占一行。

输出

逐行输出每个句子中出现次数最多的字符及其出现的次数(如果有多个字符的次数相同,只输出ASCII码最小的字

符)。

示例输入

I am a student
a good programming problem
ABCD abcd ABCD abcd

示例输出

a 2
o 4
A 2

本题思路:先将输入的句子中字母字符记录到数组a中(哈希),再找出数组a中最大的数并记录下标,若有与最大数相等的输出ASCLL码小的。
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
    char str[110];//记录英文句子
    int a[55];
    int len;
    int i,j,w;
    int ma;
    while(gets(str))
    {
        ma=0;
        memset(a,0,sizeof(a));
        len=strlen(str);
        for(i=0;i<len;i++)
        {
            if(str[i]>='A'&&str[i]<='Z')//‘A’到‘Z’对应a[0]到a[25]
            {
                w=str[i]-'A';
                a[w]++;
            }
            if(str[i]>='a'&&str[i]<='z')//‘a’到‘z’对应a[26]到a[51]
            {
                w=str[i]-'a'+26;
                a[w]++;
            }
        }
        for(i=0;i<52;i++)
        {
            if(a[i]>ma)//若a[i]的数值大于ma的数值,ma=a[i],记录下标
            {
                ma=a[i];
                j=i;
            }
            if(a[i]==ma)//若a[i]的数值与ma的数值相等,记录小的下标
            {
                if(i<j)
                   j=i;
            }
        }
        if(j>=26)//若下标比25大则输出小写字母,否则输出大写字母
            printf("%c %d\n",'a'+j-26,ma);
        else
            printf("%c %d\n",'A'+j,ma);
    }
    return 0;
}

posted @ 2014-09-02 16:59  jiangyy  阅读(422)  评论(0)    收藏  举报