高级程序设计训练——字母频率统计

【问题描述】

编写程序从标准输入中读入一段英文,统计其中小写字母出现次数,并按照从小到大的顺序以柱状图的形式显示其出现次数,出现次数为0的不输出。

【输入形式】

在标准输入上输入一段英文文章(可能有一行,也可能有多行),在新的一行的开头输入ctrl+z键表示结束。

【输出形式】

在屏幕上按照从小到大的顺序输出表示每个小写字母出现次数的柱状图(以“*”字符表示柱状图,空白处用空格字符表示,某个小写字母出现多少次,就显示多少“*”字符;柱状图的高度以出现最多的字母次数为准;出现次数为0的不输出),不输出相对应的小写字母。若文章中没有小写字母,则什么都不输出。

【样例输入】

The computing world has undergone a 

revolution since the publication of

The C Programming Language in 1978.

【样例输出】

【样例说明】

字母b、f、v和w只出现了一次,所以最左方高度为1的柱状表示这四个字母的出现次数。出现次数最多的是字母n,所以柱状图的高度为9个字符,在图的最右边。没有出现的字母,其出现次数忽略,没有显示。

#include <stdio.h>
#include <string.h>
#include<stdlib.h>

int main()
{
    char str[200][200];
    int temp;
    int length = 0, j, i, k ,s;
	int letter[26] = {0};
    int len,count=0,temp2;
	char b[26][100]={0},result[200][200]={0};

    while (length<40000 && scanf("%s", str[length]) != EOF)//实现循环文本输入,直到输入Ctrl+Z跳出循环
    {
        length++;  //记录scanf了几次
    }

    for (j = 0; j < length; j++)
    {
        len = strlen(str[j]);  //二维数组外面对行循环,里面对列循环(列即为:某行里扫描每一个字符)
        for (i = 0; i < len; i++)
        {
            temp = str[j][i];
            if (temp >= 'a' && temp <= 'z')
            {
                letter[temp - 'a']++;
            }
        }
	}



	for(k=1;k<26;k++)  //冒泡排序
	{
		for(s=0;s<26-k;s++)
		{
		  if(letter[s]>letter[s+1])
			{ temp2 = letter[s];
			 letter[s] = letter[s + 1];
			 letter[s+1] = temp2;
		  }
		}
	}


	for(k=0;k<26;k++)     //生成二维数组(可以看成是横过来的柱状图)
	{
        while(letter[k]&&k<26)
		{
			for(s=0;s<letter[k];s++)
			b[count][s]='*';
			count++;
			k++;
		}
	}

	for(i=0;i<count;i++){  //数组转置(非传统转置)
		for(j=0;j<letter[25];j++){
			result[j][i]=b[i][letter[25]-1-j];
		}
	}
	for(i=0;i<letter[25];i++)
	{	for(j=0;j<count;j++)
			printf("%c",result[i][j]);
	printf("\n");

	}
    system("pause");
	return 0;

}
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值