嘿所有,下面的程序应该采用.txt文件,并计算其中的单词数(假设是单词的字母)。它遇到空格字符时应该考虑一个单词。问题是当它打印出数组索引时,它们应该全部是整数,而不是那个长度的单词数。有什么建议吗?
#include <stdio.h>
main(argc, argv)
int argc;
char *argv[];
{
FILE *inFile;
char ch;
char ch1;
int letterCount = 0;
int i;
int wordCount[20];
void extern exit(int);
if(argc > 2) {
fprintf(stderr, "Usage: fread <filename>\n");
exit(-1);
}
inFile = fopen(argv[1], "r");
ch = fgetc(inFile);
while (ch != EOF) {
if ((isalpha(ch)) || (ch == '\''))
letterCount++;
else if ((ch == ' ') && (isalpha(ch1))) {
wordCount[letterCount - 1] = wordCount[letterCount - 1] + 1;
letterCount = 0;
}
ch1 = ch;
ch = fgetc(inFile);
}
fclose;
for (i = 0; i < 20; i++)
printf("Found %d words of length %d\n", wordCount[i], (i + 1));
}
答案 0 :(得分:4)
您永远不会将wordCount中的单个整数初始化为零。
答案 1 :(得分:0)
似乎更好的方法是在找到新单词时添加一个计数器。
编辑:重新阅读你的帖子之后,我不清楚你是想要单词总数还是每个长度的单词总数。
答案 2 :(得分:0)
你没有初始化wordCount中的值,而letterCount对于每个字母都会增加1,这意味着wordcount中的索引将是错误的。
考虑备份并再次思考这个。
以下是一些提示:
int wc = 0;
int inword = 0;
while((ch = fgetc(inFile) != EOF){
if(/* not in word and hit a word character */){
inword = 1;
} else if ( /*in a word and hit a word separator */){
wc += 1;
inword = 0;
} /* what else do you need here? */
}
/* output the word count */
答案 3 :(得分:0)
冒着做某人家庭作业的风险,除非我不这样做,我想我会做这样的事情:
char word[21];
int letterCount = 0;
int wordCount[20] = {0};
while (1==fscanf(inFile, "%20s", word)) {
size_t len = strlen(word);
letterCount += len;
++wordCount[len];
}
编辑:我应该添加它,因为它不会精确符合规定的规范。 OTOH,它可能更接近你真正想要的东西(例如,考虑你的代码如何处理标签和新行)。