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

Ale*_*der 0 c string substring

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

Ale*_*ore 11

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

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

Strtok在C字符串库中,并且会改变原始字符串,所以要小心,如果字符串需要保持原样,请先复制该字符串.

可能的例子:

//#include <string.h>

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);
Run Code Online (Sandbox Code Playgroud)

这应该工作得很好,并且原始字符串unmutated是线程安全的.

  • 它给我提醒的第一个标记而不是剩下的句子. (2认同)