我正在解析3个并行的值,这些值用特定的分隔符分隔.
token1 = strtok_s(str1, separator, &nextToken1);
token2 = strtok_s(str2, separator, &nextToken2);
token3 = strtok_s(str3, separator, &nextToken3);
while ((token1 != NULL) && (token2 != NULL) && (token3 != NULL))
{
//...
token1 = strtok_s(NULL, separator, &nextToken1);
token2 = strtok_s(NULL, separator, &nextToken2);
token3 = strtok_s(NULL, separator, &nextToken3);
}
Run Code Online (Sandbox Code Playgroud)
假设' - '是我的分隔符.行为是没有连续分隔符的字符串:
1-2-3-45
Run Code Online (Sandbox Code Playgroud)
将有效地导致这些部分中的每一个:
1
2
3
45
Run Code Online (Sandbox Code Playgroud)
但是,带有两个连续分隔符的字符串:
1-2--3-45
Run Code Online (Sandbox Code Playgroud)
不会产生0长度的字符串,跳过一个字符串,结果是:
1
2
3
45
Run Code Online (Sandbox Code Playgroud)
并不是
1
2
3
45
Run Code Online (Sandbox Code Playgroud)
哪种解决方法或策略更适合获取所有实际部件,包括0长度部件?如果可能的话,我想避免重新实现strtok_s.
不幸的是,strtok()忽略了空令牌.即使你说你希望避免这样做,除了自己解析之外别无他法,例如strchr()使用查找下一个分隔符,然后将令牌复制到临时变量进行处理.这样您就可以随心所欲地处理空令牌.