如何在c中用字符串拆分字符串

时间:2013-02-18 08:01:10

标签: c string

我有一个字符串

char * str = 1000000sep0002006sep736794eesep13610015741sep-1seplocal

我想用“sep”分割字符串,我需要像

一样的ans
String1 =1000000
String2 =0002006
String3 =736794ee
String4 =13610015741
String5 =-1
String6 =local

提前致谢

1 个答案:

答案 0 :(得分: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";

您可以修改它,因为它不是指向字符串文字的指针。相反,它是一个用字符串文字副本初始化的数组。

好的,我现在已经足够多次说过“字符串文字”......