2

input空白で区切られた単語を含む文字列があります。sscanf()単語を分割し、各単語を格納して印刷するために使用したいのですinput_wordが、whileループに入れる方法がわかりません。

これは私が持っているものです:

 char input[max];
 char split_input[max];

 /* input gets populated here */

 while (sscanf(input," %s", split_input)) {
     printf("[%s]\n", split_input);
 }

シーケンスの最後の単語が分割されるとすぐにループを終了する条件は何でしょうか?

4

3 に答える 3

4

そこで間違った関数を使用しています。strtok()代わりに提案してもいいですか?

strtokについてはこちらをお読みください

于 2012-11-05T03:02:42.213 に答える
4

すべてのコーナーケースをカバーしていない可能性があります。

#include <stdio.h>

int main(void)
{

    char *input = "abc def ghi ";
    char split_input[sizeof input];
    int n;

    while (sscanf(input," %s%n", split_input, &n) == 1) {
        printf("[%s]\n", split_input);
        input += n;
    }
}
于 2012-11-05T03:10:32.297 に答える
0

strtok()関数もお勧めします。文字列をトークン化し、ループ内で単語を1つずつ抽出できるようにします。これは例inputです。定義された文字列を想定して、それを実行する関数を記述します。

#include <stdio.h>
#include <string.h>

int tokenize(char *input) {

    const char space[2] = " ";
    char *token = strtok(input, space);
    while (token != NULL) {
        token = strtok(NULL, space);
        printf("%s\n", token);
    }

    return 0;
}
于 2015-04-17T15:04:00.187 に答える