我正在使用特定的分隔符并行解析3个值。带连续分隔符的strtok_s行为
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可以修改字符串的所有想要的,我保持原来的和工作的副本。 – MPelletier
我进入了微软的strtok_s.inl,看到这确实是预期的行为,因为有第一个“非分隔符”字符的前导分隔符跳过。嗯... – MPelletier