方案四:
对应的参考书提供的一种解法,也使用了state确定程序状态。只是打印直方图的代码更加完善,但不管该长度的单词有无均打印一行,像我一样加个判断语句也是不错的选择。
# include <stdio.h>
# define MAX 20
# define MAXLENGTH 20
# define MAXHIST 15
int main(void){
int length[MAX]; //存放某一单词长度单词个数的数组
int c; //c=getchar()
int vocl = 0; //记录某一单词的长度
int maxvalue;
int len = 0;
for(vocl = 0; vocl < MAX; vocl++){
length[vocl] = 0;
}
vocl = 0;
while((c = getchar()) != EOF){
if(c >= 'A' && c <= 'Z' || c >= 'a' && c <= 'z' || c == '-'){
vocl++;
} else{
length[vocl]++;
vocl = 0;
}
}
maxvalue = 0;
for(vocl = 1; vocl < MAX; ++vocl){
if(length[vocl] > maxvalue){
maxvalue = length[vocl];
}
}
for(vocl = 1; vocl < MAX; ++vocl){
printf("%5d - %5d : ", vocl, length[vocl]);
if(length[vocl] > 0){
if((len = length[vocl] * MAXHIST / maxvalue) <= 0){
len = 1;
}
} else{
len = 0;
}
while(len > 0){
putchar('*');
--len;
}
putchar('\n');
}
}