C将输入文本文件解析为单词

C parsing input text file into words

我正在尝试将输入文件(包含具有多行和分隔符的文本文档,即“!,.?”)解析为单词。我的函数 'splitting function' 是:

int splitInput(fp) {

    int i= 0;
    char  line[255];
    char *array[5000];
    int x;
    while (fgets(line, sizeof(line), fp) != NULL) {     
        array[i] = strtok(line, ",.!? \n");
        printf("Check print - word %i:%s:\n",i, array[i]);
        i++;
    }
    return 0;
}

这是更正后的函数[抱歉额外的样式清理]:

int
splitInput(fp)
{
    int i = 0;
    char *cp;
    char *bp;
    char line[255];
    char *array[5000];
    int x;

    while (fgets(line, sizeof(line), fp) != NULL) {
        bp = line;
        while (1) {
            cp = strtok(bp, ",.!? \n");
            bp = NULL;

            if (cp == NULL)
                break;
            array[i++] = cp;

            printf("Check print - word %i:%s:\n",i-1, cp);
        }
    }

    return 0;
}

现在,请查看 strtok 的手册页以了解 bp 技巧

如果我正确理解你的问题,你想阅读每一行并将每一行拆分成单词并将其添加到数组中。

    array[i] = strtok(line, ",.!? \n");

由于显而易见的原因,这将行不通,因为它只会 return 每行的第一个单词,而且您永远不会分配内存。

这可能就是您想要的。

    char *pch;
    pch = strtok(line, ",.!? \n");
    while(pch != NULL) {
      array[i++] = strdup(pch); // put the content of pch into array at position i and increment i afterwards.
      pch = strtok(NULL, ",.!? \n"); // look for remaining words at the same line
    }

不要忘记在使用 free 后释放数组元素。