打印输入中单词长度的直方图(垂直方向的直方图)

本文详细解析了一段用于打印输入中单词长度的垂直直方图的C代码实现,包括其核心逻辑、工作原理以及如何在不同操作系统下使用。通过实例演示,帮助读者理解如何通过字符读取、状态转换和数组计数来统计并展示单词长度分布。
<span style="background-color: rgb(255, 255, 255); font-family: Arial, Helvetica, sans-serif;"></span><pre name="code" class="objc">
#include <stdio.h>
#define MAXWORDLEN 10  /*单词的最大长度*/
#define OUT 0          /*在单词外部*/
#define IN 1             /*在单词内部*/
/*打印输入中单词长度的垂直直方图。横轴x代表单词的长度,纵轴代表长度为x的单词出现的次数
window下: EOF用 Ctrl+z 输入
Linux下: EOF用 Ctrl+d 输入 
*/

int main()
{
	int c;
	int len=0;
	int status=OUT;
	int hist[MAXWORDLEN];
	int i,j;
	int max=0;         //单词出现的最大次数
	for(i=0;i<MAXWORDLEN;i++)
		hist[i]=0;
	while((c=getchar())!=EOF)
	{
		if(c==' '||c=='\n'||c=='\t')
		{
			if(status==IN)
			{
				if(len>MAXWORDLEN)
					len=MAXWORDLEN;
				++hist[len-1];
				len=0;
			}
			status=OUT;
		}
		else if(status==OUT){
			status=IN;
			++len;
		}
		else
			++len;
	}


	for(i=0;i<MAXWORDLEN;i++)
		if(hist[i]>max)
			max=hist[i];
	putchar('\n');
	for(i=max;i>0;i--)
	{
		for(j=0;j<MAXWORDLEN;j++)
		{
			if(hist[j]>=i)
				putchar('*');
			else
				putchar(' ');
		}
		putchar('\n');
	}
	for(i=1;i<=MAXWORDLEN;i++)
		printf("%d",i);     
        putchar('\n');
       return 1;
}

测试:

 gcc -o test test.c

 ./test

输入: 

Hello

I am a boy from Beijing China Ctr+d

输出:
*         
******   
12345678910

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值