C中的数组引用

时间:2011-01-27 23:11:24

标签: c

嘿所有,下面的程序应该采用.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));
}

4 个答案:

答案 0 :(得分:4)

您永远不会将wordCount中的单个整数初始化为零。

答案 1 :(得分:0)

嗯,只需添加所有长度?如果你得到一个长度大于20 BTW的单词,这种方法就会失败。

似乎更好的方法是在找到新单词时添加一个计数器。

编辑:重新阅读你的帖子之后,我不清楚你是想要单词总数还是每个长度的单词总数。

答案 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,它可能更接近你真正想要的东西(例如,考虑你的代码如何处理标签和新行)。