c++ - 如何在不向标准 Ubuntu 版本安装额外库的情况下在 C++ 中拆分字符串?

标签 c++ string split

<分区>

我在 C++ 编程方面相对较新,所以如果我犯了任何常见错误,请多多包涵。

我有一个看起来像这样的字符串:

String str = "[abc, abcde, lkejs, abde], [123, 456, 7890]"

我希望将这些值中的每一个存储到一个 vector 中,使其看起来像这样:

abc abcde lkejs abde 123 456 7890

我已经阅读并尝试使用 Boost tokenizer,但我被限制将新库安装到应该运行此代码的操作系统中。

我也尝试过 strtok() 但这只会让我更加困惑,因为它将我的整个字符串转换为字符。

浏览 http://www.cplusplus.com/faq/sequences/strings/split/#boost-split 时,我可能最好使用 string::find_first_of(),但那里提供的示例并不能帮助我理解它的工作原理。

谁能帮助我更好地理解 string::find_first_of() 的语法,或者是否有更好的拆分字符串的方法,而不需要像 boost 那样安装额外的库?

最佳答案

第一部分是删除括号和逗号,为此std::string::erasestd::remove_if可能不错。

str.erase(std::remove_if(std::begin(str), std::end(str), [](const char& ch){
              return ch == '[' || ch == ']' || ch == ',';
          }), std::end(str));

然后您需要标记剩余的字符串,您可以再次使用 std::istringstream , 连同 standard algorithm std::copy , 和 iterator helpers std::istream_iteratorstd::back_inserter :

std::vector<std::string> v;
std::istringstream iss(str);

std::copy(std::istream_iterator<std::string>(iss),
          std::istream_iterator<std::string>(),
          std::back_inserter(v));

注意:我使用了 C++11 lambda expressionstd::remove_if 调用中。如果您没有支持 C++11 的编译器,它可以简单地替换为普通函数。

关于c++ - 如何在不向标准 Ubuntu 版本安装额外库的情况下在 C++ 中拆分字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19972325/

相关文章:

c++ - 多项式ADT类

python - 如何检查数组中每一项的首字母?

php - 任何使用 DISTINCT 与此代码的想法

search - 在 VIM 中的窗口中单独搜索

python - 使用 Python 正则表达式按换行符或句点划分字符串

c++ - 带有任务调度程序的 IOCP(线程构建 block )

C++ 输入输出排序

c - 从函数接收字符串数组,并找出其长度

c++ - 执行 C++ 程序并使用 Perl 复制 cmd 输出

c++ - 字符串有问题。调试声称 "bad pointer"