学校1010: 字频统计

Description
给出一段英文文章,统计文章中字母出现的频率(即出现的次数)。字母不区分大小写。按照字母的字典顺序进行柱状显示。 


Input
第一行为一个正整数,表示有多少组测试数据。每组数据的第一行为一个正整数m (m<100),表示每组测试数据的行数。接下来有m行。每行都是由字母、标点、空格等符号组成的字符串。每行最多1000个字符。 
Output
每组数据对应一个柱状显示图输出。上方按照统计频率输出相应高度的“柱”(用星号和点表示,其中星号标识出现频率,点代表空),下方为相应的大写字母。相应参考样例输出。最上方没有多余空行。每组数据结束后有一个空行。 
Sample Input
1
2
Given the coordinates of the vertices of a triangle, and a point.
You just need to judge whether the point is in the Triangle. 
Sample Output
....*.....................
....*.....................
....*..............*......
....*..............*......
....*..............*......
....*..............*......
....*...*....*.....*......
....*...*....**....*......
....*...*....**....*......
*...*..**....**....*......
*...*..**....**..*.*......
*..**.***....**..***......
*..**.***....**..****.....
*.********.*.***.*****....
*.********.*.***.******.*.

ABCDEFGHIJKLMNOPQRSTUVWXYZ


1.字符串减A或a   ; 2.直接输出'*'或 '.',不必建一个二维字符数组储存。3用if(sum[j]>i)来决定输出'*'还是 '。

#include <stdio.h>
#include <string.h>
#include<ctype.h>
#define N 27
int main()
{
    // freopen("input.txt","r",stdin);
    char str[100][1100];
    int i,j,t,m,sum[N],max;
    scanf("%d",&t);
    while(t--)
    {
        memset(sum,0,sizeof(int)*N);
        scanf("%d",&m);
        getchar();
        for(i=0; i<m; i++)
            gets(str[i]);
        for(i=0; i<m; i++)
            for(j=0; str[i][j]!='\0'; j++)
            {
                if(str[i][j]>='A'&&str[i][j]<='Z')
                    sum[str[i][j] - 'A'] ++;
                else if(str[i][j]>='a'&&str[i][j]<='z')
                    sum[str[i][j] - 'a'] ++;
            }
//for(i=0; i<N; i++)
        // printf("%d",sum[i]);
        max=sum[0];
        for(i = 0; i < N; i++)
        {
            if(sum[i] > max)
                max =sum[i];
        }
        for(i=max-1; i>=0; i--)
        {
            for(j=0; j<N-1; j++)
            {
                if(sum[j]>i)
                {
                    putchar('*');
                    sum[j]--;       //进入下一行比较
                }
                else
                    putchar('.');
            }
            putchar('\n');
        }
        for(i=0; i<N-1; i++)
            printf("%c",i+'A');
        printf("\n\n");
    }
    return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值