使用特定的多字节分隔符标记字符串

mom*_*der 1 c string token strtok

我需要解析这样的字符串:

link:a link:blink:c link:d lkjh

输出应该是a, blink:c,d

但是使用strtok不稳定的输出是a, b, c, d,jh

我如何确保只link:明确拆分字符串(避免出现blink:c拆分的情况。另外我如何确保最后一个kjh不出现(k 似乎是这里的分隔符)。

pad*_*ddy 5

首先,将分隔符字符串传递给strtok您似乎并不像您想的那样。如果您"link:"作为delim字段传递,它将使用这些字符中的任何一个作为分隔符。这就是为什么lkjh被拆分和返回jh

您最好按空格拆分,然后检查开头的匹配项"link:"

const char * delim = " ";
const char * prefix = "link:";
const size_t len_prefix = strlen( prefix );

char * token = strtok( input_string, delim );
while( token != NULL ) {
    if( 0 == strncmp( token, prefix, len_prefix )
    {
        printf( "%s\n", token + len_prefix );
    }
    token = strtok( NULL, delim );
}
Run Code Online (Sandbox Code Playgroud)

如果您需要比这更复杂的东西,请自行制作或使用正则表达式。