c++ - 在不丢失分隔符的情况下拆分字符串

标签 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
This
is
an
exampl

如果我将分隔符从 ' ' 更改为 'e',输出为:

1 This is an
xampl

示例中的“e”丢失了。如何使用相同的代码拆分字符串而不丢失用作分隔符的字母?

最佳答案

我建议使用简单的 \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 .

关于c++ - 在不丢失分隔符的情况下拆分字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40397773/

相关文章:

c++ - 使用 C++ 在多线程应用程序中测量全局时间(挂钟)的最快方法

java - 声明 "=="条件的标准准则是什么?

c++ - 处理 C++ 目标中的 ANTLR3 错误

ruby - 在 Ruby 中评估一段字符串作为代码

java - 当前缀分隔符和后缀分隔符不同时,分割字符串的最佳方法是什么?

c++ - 理解指针和本地范围

c# - 通过比较部分目录路径来匹配子目录

javascript - 无限重复字符串 - 返回无限字符串 N 长度内特定字符的计数 - JavaScript

c++ - 为什么 strtok 不能与 stringstream 一起使用?

linux - 将一个文本文件分成两等份