我正在使用特定的分隔符並行解析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