我需要像这样解析一个字符串:
link:a link:blink:c link:d lkjh
输出应该是a
, blink:c
, d
但是使用 strtok
的输出是 a
, b
, c
, d
, jh
我如何确保只有 link:
显式拆分字符串(避免 blink:c
被拆分的情况。
另外,我如何确保最后一个 kjh
不出现(k 似乎是这里的分隔符)。
最佳答案
首先,将分隔符字符串传递给 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 );
}
如果您需要比这更复杂的东西,请自己动手或使用正则表达式。
关于c - 使用特定的多字节定界符标记字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36587342/