执行结果你自己看看
#include <stdio.h>
#define IN 1
#define OUT 0
#define MAXL 80
int nw;
void gram2(int s[],int i)//打印直方图其实就是这个函数,根据你说的这个函数比较重要
{int k;//定义k
for(k=1;k<=nw;++k)//这个for循环你看主函数就知道循环多少次了
if(s[k]>=i)printf("|");//如果s[k]>=i就是直方图还没有打完,就是打印一个“|”符号,这就达到了打印直方图的效果
else printf(" ");//这就是打印空格啦,不用我多讲
printf("\n");//打印换行
}
void word_len(int nword[])//这一段就是统计单词了
{int i,c,state=OUT;
nw=0;
while((c=getchar())!=EOF)
if(c==' '||c=='\n'||c=='\t')
state=OUT;
else
{if(state==OUT)
{state=IN;++nw;}
++nword[nw];
}
for(i=1;i<=nw;++i)
{printf("%3d",nword[i]);
if(i%20==0)printf("\n");
}
printf("\n");
}
main()//主函数
{int nwarr[MAXL]={0};
int i,mlength;
word_len(nwarr);
mlength=0;
for(i=1;i<=nw;++i)
if(nwarr[i]>mlength)mlength=nwarr[i];
for(i=mlength;i>0;--i)
gram2(nwarr,i);
}