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
后释放数组元素。
我正在尝试将输入文件(包含具有多行和分隔符的文本文档,即“!,.?”)解析为单词。我的函数 '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
后释放数组元素。