0

私は文字列を持っています

char * str = 1000000sep0002006sep736794eesep13610015741sep-1seplocal

文字列を「sep」で分割したいのですが、次のようなansが必要です

String1 =1000000
String2 =0002006
String3 =736794ee
String4 =13610015741
String5 =-1
String6 =local

前もって感謝します

4

1 に答える 1

4

を繰り返し呼び出すことで、自分でトークン化できますstrstr。それをまとめてNULLを安全に処理するための単純な関数はどうですか?

char *next_token( char *str, const char *tok )
{
    if( str == NULL ) return NULL;
    char *s = strstr(str, tok);
    if( s == NULL ) return NULL;
    *s = 0;
    s += strlen(tok);
    return s;
}

次に、それはただです:

char *string1 = str;
char *string2 = next_token( string1, "sep");
char *string3 = next_token( string2, "sep");
// etc...

しかし、私は配列を使用する傾向があります。

char * strings[6] = { str, 0 };
for( int i = 1; i < 6; i++ ) {
    strings[i] = next_token( strings[i-1], "sep" );
}

[編集]

ユーザーがコメントで言及をほどくように、このような文字列リテラルをトークン化することはできません。文字列リテラルを操作する必要がある場合は、元の文字列を変更せずに部分文字列を抽出するトークン化が必要です。それはあなたのための練習です。しかし、それを回避したい場合は、char代わりに文字列を配列にしてください。

char str[] = "1000000sep0002006sep736794eesep13610015741sep-1seplocal";

文字列リテラルへのポインタではないため、これを変更できます。代わりに、文字列リテラルのコピーで初期化される配列です。

さて、私は「文字列リテラル」を何度も言いました...

于 2013-02-18T08:08:10.967 に答える