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

时间:2015-11-04 21:41:54

标签: c split strtok

我正在尝试将输入文件(包含带有多行和分隔符的文本文档,即“!,。?”)解析为单词。我的功能'分裂功能'是:

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;
}

2 个答案:

答案 0 :(得分:1)

这是更正的功能[对不起额外的风格清理]:

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技巧

答案 1 :(得分:0)

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

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

由于它只会返回每一行的第一个单词而你永远不会分配内存,所以这不会有明显的原因。

这可能是你想要的。

    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后,不要忘记释放数组元素。