为什么这段用于计数每个长度的单词数的代码不起作用?

时间:2019-04-14 06:56:19

标签: c file text

  

计算给定文本文件中每个长度的单词数。   单词是除空格和行尾以外的任何符号的任何子串。作为单词的子字符串必须以空格,行尾或文件尾为界。

我不明白为什么我的程序在哪里以及什么地方不起作用。在我们的自动测试系统中,下面的程序通过了20个测试中的8个(您看不到这些测试)。

输出必须为:

单词长度-文本中该长度的单词数

每个换行符按升序排列。如果此长度的单词数为零,则无需打印。输出必须写入文件。

#include <stdio.h>

long int c[99999];
int main() {
    FILE *input;
    input = fopen("input.txt", "r");
    FILE *output;
    output = fopen("output.txt", "w");
    char state = 0;
    int s;
    long int l = 0;
    for (s = fgetc(input); (s != EOF); s = fgetc(input)) {
        if (((s == '\n') || (s == '\0') || (s == ' ')) && (state == 1)) { c[l]++; l = 0; state = 0; }
        if (!((s == '\n') || (s == '\0') || (s == ' ')) && (state == 1)) l++;
        if (!((s == '\n') || (s == '\0') || (s == ' ')) && (state == 0)) {state = 1; l++;}
    }
    if ((s == EOF) && (state == 1)) c[l]++;
    for (int i = 1; i < 99999; i++) if (c[i] > 0) fprintf(output, "%d - %d\n", i, c[i]);
    fclose(input);
    fclose(output);
    return 0;
}

0 个答案:

没有答案