0

csv 文字列を解析するために C で strtok() を使用しています。

私の文字列の例は次のとおりです。

str= "name1 secondname1 cin,name2 secondname2 cin"

最初に strtok を区切り文字 "," で使用し、次に文字列を " " で区切ります。

char delims1[] = ",";
char delims2[] = " ";
char *result1 = NULL;
char *result2 = NULL;

result1 = strtok(str, delims1);

while ( result1 != NULL ) {

    result2 = strtok(result1,delims2);

    while ( result2 != NULL ) {
        printf("%s\n" ,result2);

    }

    result1 = strtok(NULL, delims1);
}     

期待される結果は次のとおりです。

name1
secondname1 
cin
name2
secondname2
cin
4

1 に答える 1

0

スタックオーバーフローへようこそ。質問するときは、実際に質問してみてください

ただし、この場合は、期待どおりの出力が得られていないと仮定します。

問題はstrtok、最後の呼び出しの状態を内部的に保存することです。したがって、2 つの異なる解析を混在させると、問題が発生します。

The Microsoft implementation of the C library provides strtok_sthat allow you to pass the state variable in. そのコンパイラを使用している場合は、その関数の使用に切り替えます。それ以外の場合は、独自に作成する必要がある場合があります。

または、1 つのパスで各列をトークン化し、ポインターを配列に格納することもできます。次に、2 番目のパスを実行し、配列内の各文字列をトークン化します。

于 2013-03-24T21:58:41.703 に答える