C程序设计语言 (第二版) 练习1-14
练习1-14 编写一个程序,打印输入中各个字符出现频度的直方图。
注意:代码在win32控制台运行,在不同的IDE环境下,有部分可能需要变更。
IDE工具:Visual Studio 2010
代码块:
#include <stdio.h>
#include <stdlib.h>
int main(){
char c;
int count[4];
char *name[4] = {"Letter: ", "Number: ", "Space: ", "Other: "};
for(int i = 0; i < 4; i++){
count[i] = 0;
}
while((c = getchar()) != EOF){
if((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z')){
count[0]++;
}
else if(c >= '0' && c <= '9'){
count[1]++;
}
else if(c == ' ' || c == '\t'){
count[2]++;
}
else{
count[3]++;
}
}
for(int i = 0; i < 4; i++){
printf("%-8s %2d ", name[i], count[i]);
for(int j = 0; j < count[i]; j++){
printf("*");
}
printf("\n");
}
printf("\n");
int maxLen = 0;
for(int i = 0; i < 4; i++){
if(count[i] > maxLen){
maxLen = count[i];
}
}
int col = maxLen;
for(int i = 0; i < maxLen; i++){
for(int j = 0; j < 4; j++){
if(count[j] >= col){
printf(" * ");
}
else{
printf(" ");
}
}
col--;
printf("\n");
}
for(int i = 0; i < 4; i++){
printf(" %d ", count[i]);
}
printf("\n");
system("pause");
return 0;
}