运行环境:Windows+TC++
初学阶段,为了让自己有点记录,所以把此程序上传博客中,欢迎文明拍砖。
#include <stdio.h>
#define IN 1/*在单词内*/
#define OUT 0/*在单词外*/
#define MAXLEN 20/*单词最多字符数*/
main()
{
int countw=0,max=0,i,state,j;
int num[MAXLEN],c;/*单词计数数组,num[i]为长度为i的单词个数*/
for(i=0;i<MAXLEN;num[i++]=0);/*单词计数数组清零*/
state=OUT;
while ((c=getchar())!=EOF)
if (c!='\n'&&c!=' '&&c!='\t'){/*如是有效单词字符,长度加1*/
countw++;
if (state==OUT) state=IN;/*单词第一个字符*/
}
else if(state==IN) {/*不是有效单词字符且一个单词结束,此中长度单词计数器加1*/
num[countw]++;
state=OUT;
if (num[countw]>max) max=num[countw];/*记录单词长度出现最多的个数*/
countw=0;
}
if(state==IN) {/*考虑输入最后一个单词后紧接着直接以EOF结束,则最后一个单词没有计入*/
num[countw]++;
} if (num[countw]>max) max=num[countw];
/*水平直方图*/
for(i=1;i<20;i++)
if(num[i]>0){
printf("%2d",i);
for(j=num[i];j>0;j--)
printf("*");
printf("\n");
}
/*垂直直方图*/
for(j=max;j>0;j--){
for(i=1;i<20;i++)
if(num[i]>=j) printf("* ");
else if(num[i]!=0)
printf(" ");
printf("\n");
}
for(i=1;i<20;i++)
if(num[i]!=0)
printf("%d ",i);
printf("\n");
return;
}
总结:之前拜读了大虾作品,知道getchar()结束为Ctrl+Z,经过实践发现还需再按一次回车,不知何故?是否是getchar()接收是以行结束?学习中。。。。。。