【发布时间】:2015-10-06 22:33:58
【问题描述】:
考虑以下两个不同字符串的场景:
Row1: MyID-MyName-MyAddress-MyNumber-MyNumber2-MyAlias
Row2: MyID-MyName-MyAddress-MyNumber--MyAlias
在第二个示例中,MyNumber2 的值缺失。我需要使用strtok() 提取每个属性。到目前为止,这是我的代码:
MyID = strtok (str, "-"); //where 'str' is the full string
MyName = strtok (NULL, "-");
MyAddress = strtok (NULL, "-");
MyNumber = strtok (NULL, "-");
MyNumber2 = strtok (NULL, "-");
MyAlias = strtok (NULL, "-");
第一个示例运行良好,我可以将每个 属性 存储在变量中。但是,在第二个示例中,我遇到了麻烦:
进入变量MyNumber2 时,strtok() 不会返回空字符串(如我所愿)。相反,它会读取字符串直到第一个字符与分隔符"-" 不匹配,从而忽略字符串中 empty 值的存在。
是否有可能每个分隔符只拆分一次字符串?
【问题讨论】:
-
"
MyNumber的值缺失" -- 你的意思是MyNumber2的值缺失 -
这是预期的行为。如果要处理空令牌,则必须编写自己的 strtok 函数。找到一些 strtok 源并根据您的需要进行修改。
-
@CoolGuy 事实上,我已经编辑了这个问题。谢谢。
-
使用
strsep而不是strtok。