c - 使用特定的多字节定界符标记字符串

标签 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 似乎是这里的分隔符)。

最佳答案

首先,将分隔符字符串传递给 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/

相关文章:

c - 如何使变量返回 N/A? (c语言)

java - 避免 Java 中的重复字符串

angular - Angular 的身份验证系统(没有登录页面的企业站点)

javascript - 如何在用户身份验证后打开新窗口并提取参数

c - 如何在不使用 zlib 库的情况下在 C 编程中使用 gzip 编码

macOS 上的 Clang 无法从 ncurses 链接 lmenu

c - 将 16 位有符号整数表示为 0-100 之间的值

java - 将一个字符串转换为多个字符串

python - 使用字典列表中的特定值创建列表(键是字符串,值是整数列表)

php - 撤消plus.login