繁体   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