Как эффективно извлечь слова из предложения в C? - PullRequest
0 голосов
/ 13 октября 2009

Мне нужна эффективная функция, которая извлекает первую секунду и остаток предложения в три переменные.

Ответы [ 3 ]

11 голосов
/ 13 октября 2009

Простой способ: используйте 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);

Это должно работать очень хорошо и быть безопасным для потоков с исходной строкой без изменений.

2 голосов
/ 13 октября 2009

Сначала нужно определить разделители. Есть несколько проблем с strtok (он изменяет свой аргумент, например, который может привести к неприятностям). Я предпочитаю читать в строке и запускать собственный анализатор, который может варьироваться от sscanf до полноценного анализатора. Пожалуйста, опубликуйте подробнее.

2 голосов
/ 13 октября 2009
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...