我正在编写一个程序,它将读取输入,然后返回K&字符计数的直方图。 R - Ex。 1.13
有关如何改进代码的任何建议?是否我在状态或首先测试状态是否重要?我注意到在我的例子中,人们先测试c是否为空白或制表符。
我想我需要重温直方图。它并没有真正扩展结果。它只根据长度绘制一个连字符。
我认为修改后要更具可读性。
// Print a histogram of the length of words in it's input.
#include <stdio.h>
#define IN 1
#define OUT 2
#define MAX 99
int main(){
int c; // the character
int countOfLetters = 0;
int insideWord = OUT;
int frequencyOfLengths[MAX];
int longestWordCount = 0;
int i, j; // Counters
for (i = 0; i < MAX; i++){
frequencyOfLengths[i] = 0;
}
while ((c = getchar()) != EOF){
if (c == ' ' || c == '\n' || c == '\t'){
if (insideWord == IN){
if (countOfLetters > MAX){
return 1;
}
++frequencyOfLengths[countOfLetters];
if (countOfLetters >= longestWordCount) longestWordCount = countOfLetters;
}
countOfLetters = 0;
}
else {
countOfLetters++;
insideWord = IN;
}
}
for (i = 1; i <= longestWordCount; i++){
printf("%3i : %3i ", i, frequencyOfLengths[i]);
for (j = 0; j < frequencyOfLengths[i]; j++){
printf("*");
}
printf("\n");
}
return 0;
}
答案 0 :(得分:0)
绝对缩放结果,查看我的Character Histogram进行水平缩放直方图。
此外,您可以从y轴标签中受益。很难说哪个条的长度是哪个条。我不知道哪个栏是什么字长。
我在显示直方图之前添加了这个代码,它基本上将每个值减半,这会丢掉你的条形码标签。你可以搞清楚!
// Iterates and tells us the most frequent word length
int mostFrequent = 0;
for (i = 1; i < MAXWORD; i++)
if (charCount[i] > mostFrequent)
mostFrequent = charCount[i];
// If the bar will be too big, cut every value in half
while (mostFrequent > 60) {
for (i = 1; i < MAXWORD; i++)
if (charCount[i] > 0) {
charCount[i] /= 2;
charCount[i] |= 1;
}
// Check again to find the most frequent word length category
mostFrequent = 0;
for (i = 1; i < MAXWORD; i++)
if (charCount[i] > mostFrequent)
mostFrequent = charCount[i];
}
老实说,这些酒吧难以阅读,也许只是使用一行如█!
到目前为止,很棒的书,我们实际上一起阅读并且在同一页上!
干杯