簡體   English   中英

具有連續定界符的strtok_s行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM