首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C++11拆分字符串

使用C++11拆分字符串
EN

Stack Overflow用户
提问于 2012-02-25 01:37:47
回答 10查看 139K关注 0票数 71

使用c++11拆分字符串最简单的方法是什么?

我看过这个post使用的方法,但我觉得应该有一种使用新标准的不那么冗长的方法。

编辑:我想有一个vector<string>的结果,并能够界定在一个单一的字符。

EN

回答 10

Stack Overflow用户

发布于 2012-02-25 04:17:36

std::regex_token_iterator基于正则表达式执行通用标记化。对于单个字符进行简单的拆分,它可能会也可能不会被夸大,但它是有效的,并且不会太冗长:

代码语言:javascript
复制
std::vector<std::string> split(const string& input, const string& regex) {
    // passing -1 as the submatch index parameter performs splitting
    std::regex re(regex);
    std::sregex_token_iterator
        first{input.begin(), input.end(), re, -1},
        last;
    return {first, last};
}
票数 66
EN

Stack Overflow用户

发布于 2014-12-17 02:08:15

这里有一种(可能不太冗长)拆分字符串的方法(基于您提到的post )。

代码语言:javascript
复制
#include <string>
#include <sstream>
#include <vector>
std::vector<std::string> split(const std::string &s, char delim) {
  std::stringstream ss(s);
  std::string item;
  std::vector<std::string> elems;
  while (std::getline(ss, item, delim)) {
    elems.push_back(item);
    // elems.push_back(std::move(item)); // if C++11 (based on comment from @mchiasson)
  }
  return elems;
}
票数 34
EN

Stack Overflow用户

发布于 2016-09-21 19:27:13

下面是一个使用boost拆分字符串并使用提取的元素填充向量的示例。

代码语言:javascript
复制
#include <boost/algorithm/string.hpp>

std::string my_input("A,B,EE");
std::vector<std::string> results;

boost::algorithm::split(results, my_input, boost::is_any_of(","));

assert(results[0] == "A");
assert(results[1] == "B");
assert(results[2] == "EE");
票数 16
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9435385

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档