拆分字符串而不丢失分隔符

时间:2016-11-03 09:21:33

标签: c++ string split separator

我在此处使用此代码进行字符串拆分:string split

char sep = ' ';
std::string s="1 This is an exampl";

for(size_t p=0, q=0; p!=s.npos; p=q)
std::cout << s.substr(p+(p!=0), (q=s.find(sep, p+1))-p-(p!=0)) << std::endl;

代码正常,输出为:

  

1
  这
  是
  一个
  为例

如果我从&#39;更改分隔符&#39;到&#39; e&#39;,输出是:

  

1这是一个   xampl

&#39;&#39;例如,丢失了。如何使用相同的代码拆分字符串,但不会丢失用作分隔符的字母?

1 个答案:

答案 0 :(得分:1)

我建议将字符串拆分为一个简单的\b(?=e)正则表达式(仅当e前面没有字母,数字或下划线时才匹配):

#include <string>
#include <iostream>
#include <regex>
using namespace std;

int main() {
    std::vector<std::string> strings;
    std::string s = "1 This is an exampl";
    std::regex re("\\b(?=e)");
    std::regex_token_iterator<std::string::iterator> it(s.begin(), s.end(), re, -1);
    decltype(it) end{};
    while (it != end){
        strings.push_back(*it++);
        std::cout << strings[strings.size()-1] << std::endl; // DEMO!
    }
    return 0;
}

请参阅C++ demo