[英]strtok_s behaviour with consecutive delimiters
我正在並行解析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()
忽略了空令牌。 即使您說希望避免這樣做,也只能通過自己解析它,例如使用strchr()
查找下一個定界符,然后將令牌復制到一個臨時變量中進行處理,就沒有其他方法了。 這樣,您可以隨心所欲地處理空令牌。
是的,這就是該功能的工作方式。 它更適合諸如單詞解析之類的任務,其中多個空格字符不應被視為空單詞。
我已經做了很多解析。 我只是在這里編寫自己的解析器,其中代碼一次檢查一個字符。 這並不困難,您可以使其表現出所需的功能。 作為示例,我在文章“在MFC中讀寫CSV文件”中發布了一些C ++代碼來解析CSV文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.