0

文の最初の 2 番目と残りの部分を 3 つの変数に抽出する効率的な関数が必要です。

4

3 に答える 3

11

簡単な方法: strtok()または strtok_r を使用して最初の 2 つのトークンを取得します。これにより、それらが文字列から削除されるため、文字列自体が探していた 3 番目のトークンになります。

難しい方法:自分で解析してください:(

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);

これは正常に機能し、元の文字列が変更されていない状態でスレッドセーフになるはずです。

于 2009-10-12T20:19:42.577 に答える
2

strtok()

于 2009-10-12T20:16:54.483 に答える
2

最初に区切り文字を定義する必要があります。にはいくつかの問題がありますstrtok(1 つは引数を変更することで、問題が発生する可能性があります)。私は文字列を読み込んでカスタム パーサーを実行することを好みますsscanf。もう少し詳細を投稿してください。

于 2009-10-12T20:20:40.467 に答える