如何在C中有效地从句子中提取单词?

我需要一个有效的函数,将句子的第一秒和其余部分提取为三个变量。

简单方法:使用strtok()或strtok_r获取前两个标记,这将从字符串中删除它们,因此字符串本身将是您正在寻找的第三个标记。

困难的方法:自己解析:(

Strtok位于C字符串库中,并且会改变原始字符串,因此请小心,如果需要保持原样,请先复制字符串。

可能的例子:

//#include  char input[] ="first second third forth"; char delimiter[] = " "; char *firstWord, *secondWord, *remainder, *context; int inputLength = strlen(input); char *inputCopy = (char*) calloc(inputLength + 1, sizeof(char)); strncpy(inputCopy, input, inputLength); firstWord = strtok_r (inputCopy, delimiter, &context); secondWord = strtok_r (NULL, delimiter, &context); remainder = context; printf("%s\n", firstWord); printf("%s\n", secondWord); printf("%s\n", remainder); getchar(); free(inputCopy); 

这应该工作得很好,并且在原始字符串未突变的情况下是线程安全的。

的strtok()

您需要先定义分隔符。 strtok存在一些问题(它改变了它的论点,一个可能让你遇到麻烦)。 我更喜欢读取字符串并运行自定义解析器,其范围可以从sscanf到完整的解析器。 请发布更多细节。