该题摘自Kernighan的《C程序设计语言》第17页练习1-13。 下载见
编写一个程序,打印输入中单词长度的的直方图。水平方向的直方图比较容易绘制,垂直方向的直方图则要困难些。
经过这本C语言圣经第一章的调教,发现getchar()原来那么强大。
多种实现
方案一:
声明state变量,用来记录程序当前是否正位于一个单词之中,这样便于理解。
# include <stdio.h>
# define MAX 20
# define OUT 0
# define IN 1
int main(void)
{
int length[MAX];
int c;
int vocl;
int state = OUT;
int i;
for(vocl = 0; vocl < MAX; vocl++){
length[vocl] = 0;
}
while((c = getchar()) != EOF){
if(c != ' ' && c != '\t' && c != '\n'){
if(state == OUT){
vocl = 1;
} else{
vocl++;
}
state = IN;
} else{
length[vocl]++;
vocl = 0;
}
}
for(vocl = 0; vocl < MAX; vocl++){
if(length[vocl] != 0){
printf("%2d ", vocl);
for(i = 1; i <= length[vocl]; i++){
putchar('*');
}
putchar('\n');
}
}
}