【发布时间】:2012-01-24 04:19:11
【问题描述】:
我正在并行解析 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);
}
假设 '-' 是我的分隔符。行为是没有连续分隔符的字符串:
1-2-3-45
将有效地导致以下每个部分:
1
2
3
45
但是,一个有两个连续分隔符的字符串:
1-2--3-45
不会产生长度为 0 的字符串,该字符串会被跳过,结果是:
1
2
3
45
而不是
1
2
3
45
什么解决方法或策略更适合获取所有实际部分,包括长度为 0 的部分?如果可能,我想避免重新实现 strtok_s。
【问题讨论】:
-
strtok() 是邪恶的,因为它修改了输入字符串。除此之外,我很好奇这个问题的答案。
-
就我而言,strtok 可以随心所欲地修改字符串,我保留原件并处理副本。
-
我进入了微软的 strtok_s.inl 并看到这确实是预期的行为,因为第一个“非定界符”字符跳过了前导定界符。嗯……