我正在尝试将输入文件(包含带有多行和分隔符的文本文档,即“!,。?”)解析为单词。我的功能'分裂功能'是:
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;
}
答案 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
后,不要忘记释放数组元素。