编程:打印输入中单词长度的水平方向的直方图。
代码:
#include <stdio.h>
#include <ctype.h>
#define MAXLEN 30
#define WORD_TABLE_LEN 30
void printWordTable(FILE *fin, FILE *fout);
int main(int argc, char *argv[])
{
printWordTable(fopen("main.c", "r"), stdout);
return 0;
}
void printWordTable(FILE *fin, FILE *fout)
{
char inword = 'n';
size_t wordTable[WORD_TABLE_LEN];
for (size_t i = 0; i != WORD_TABLE_LEN; ++i)
wordTable[i] = 0;
int c;
size_t len = 0;
while ((c = fgetc(fin)) != EOF) {
if (inword == 'y') {
if (isalnum(c)) {
++len;
continue;
} else {
++wordTable[len];
inword = 'n';
len = 0;
continue;
}
} else {
if (isalnum(c)) {
++len;
inword = 'y';
continue;
} else {
continue;
}
}
}
for (size_t i = 0; i != WORD_TABLE_LEN; ++i) {
if (i%10 == 0)
fprintf(stdout, "\n");
fprintf(stdout, "%ld ", wordTable[i]);
}
fprintf(stdout, "\n\n");
size_t maxCount = 0;
for (size_t i = 0; i != WORD_TABLE_LEN; ++i)
if (wordTable[i] > maxCount)
maxCount = wordTable[i];
while (maxCount != 0) {
for (size_t i = 0; i != WORD_TABLE_LEN; ++i) {
if (wordTable[i] == maxCount) {
--wordTable[i];
fprintf(stdout, "* ");
} else {
fprintf(stdout, " ");
}
}
fprintf(stdout, "\n");
maxCount = 0;
for (size_t i = 0; i != WORD_TABLE_LEN; ++i) {
if (wordTable[i] > maxCount)
maxCount = wordTable[i];
}
}
}
难道我应该加一点注释。。。。这个程序的确不好看明白。。。以后要画流程图了。。。