【发布时间】:2014-03-18 08:49:59
【问题描述】:
我有一个这样的字符串:
std::string input("I #am going to# learn how #to use #boost# library#");
我这样做:
std::vector<std::string> splitVector;
boost::split(splitVector, input, boost::is_any_of("#"));
得到了这个:(splitVector)
splitVector:
"I "
"am going to"
" learn how "
"to use "
"boos"
" library"
"" // **That's odd, why do I have an empty string here ?**
但是需要这样的东西:
splitVector:
"I "
"#am going to"
"# learn how "
"#to use "
"#boost"
"# library"
"#"
如何做到这一点?或者也许在 boost 库中还有另一种方法可以做到这一点?
为什么我在splitVector 中得到一个空字符串?
【问题讨论】:
-
为什么需要保留分隔符?
-
@gg.kaspersky,好问题!结果我必须恢复相同的字符串(使用 splitVector 构建它),并且我有一个问题来检测字符串中有多少定界符,奇数或偶数,换句话说,我总是恢复它,因为它有偶数分隔符。例如:如果我有字符串“#test”和“#test#”并将其拆分,获取第一个字符串“test”和相同的第二个字符串“test”,并将两个字符串恢复为“#test#”跨度>
-
有空字符串是因为最后一个分隔符后面的输入字符串是空的。由于您的分隔符是单个字符,您可以简单地将字符添加(或附加)到结果字符串。如果有许多不同的分隔符,我认为 boost split 没有您需要的功能。有关其他解决方案,请参阅例如 this question。
-
spliton"#test#"应该返回{"","test",""}? -
@edwin,我不确定我是否正确理解了您的 restore-string-use-case,但是 1. 您可以使用 join (stackoverflow.com/questions/1833447/…) 和 2. Number of ' 重建原始字符串#' 等于 splitVector.size() - 1