打印单词长度的直方图(4)

方案四:
 
对应的参考书提供的一种解法,也使用了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');
 }
}

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/387c7872346f76c706d35aa4d0c177d2.html