对单词长度直方图理解有错,下面代码是直接打印出了每个单词的长度。 真正的单词长度直方图应该是长度为某个数的单词数多少。 就如图像处理中的灰度直方图,讲的是对应灰度的像素数多少。 // 单词长度的水平直方图 #include <stdio.h> #define WORDS_NUBMER 100 // 输入的最多单词数 #define IN 1 // inside a word #define OUT 0 // outside a word int main() { int i, j, c, state, nw; int nchword[WORDS_NUBMER] = {0}; // 数组中的数存放遇到的单词中的字符数 state = OUT; nw = 0; // 统计单词数 while ((c = getchar()) != EOF) { if (c == ' ' || c == '/t' || c == '/n') { if (state == IN) { state = OUT; // 在单词外 } } else if (state == OUT) // 出现某个单词的首字符 { ++nchword[nw]; ++nw; state = IN; } else // 单词除过首字符的其他字符 { ++nchword[nw-1]; // 数组从0开始计数 } } // 输出直方图 for (i = 0; i < nw; i++) { printf("Word NO%2d: ", i); for (j = 0; j < nchword[i]; j++) { printf("| "); } printf("/n"); } return 0; }