如何在 c++ 中拆分字符串而不将其他库安装到标准 Ubuntu 版本
How do I split a string in c++ without installing additional libraries to standard Ubuntu version?
我在 c++ 编程方面相对较新,所以如果我犯了任何常见的错误,请耐心等待。
我有一个看起来像这样的字符串:
String str = "[abc, abcde, lkejs, abde], [123, 456, 7890]"
我希望将这些值中的每一个都存储到一个向量中,使其看起来像:
abc abcde lkejs abde 123 456 7890
我已经阅读并尝试使用 Boost 标记器,但我被限制将新库安装到应该运行此代码的操作系统中。
我也尝试过 strtok(),但这只会让我更加困惑,因为它将我的整个字符串转换为字符。
浏览 http://www.cplusplus.com/faq/sequences/strings/split/#boost-split,我可能最好使用string::find_first_of()
但是那里提供的示例在帮助我理解它是如何工作的方面并没有多大作用。
谁能帮助我更好地理解string::find_first_of()
的语法,或者是否有更好的方法来拆分字符串而无需像 boost 那样安装额外的库?
第一部分是去掉括号和逗号,因为这个std::string::erase
std::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
,以及标准算法std::copy
,迭代器助手std::istream_iterator
和std::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));
注意:我在std::remove_if
调用中使用了 C++11 lambda 表达式。如果您没有支持 C++11 的编译器,则可以简单地将其替换为普通函数。
相关文章:
- 在执行其他功能的同时播放动画(LED矩阵和Arduino/ESP8266)
- 将数组作为参数传递给函数安全吗?作为第三方职能部门,可以探索他们想要的之外的其他元素
- 在Ubuntu 16.04上安装Cilk时出现问题
- 有没有什么方法可以使用一个函数中定义的常量变量,也可以由c++中同一程序中的其他函数使用
- 在CMakeLists.txt的安装功能中使用.cmake文件有什么用
- C++:如何在CLion IDE中安装Boost
- GL_SHADERSTORAGE_BUFFER位置是否与其他着色器位置冲突
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- 在其他文件中创建类时在 c++ 项目中不起作用
- 类与私有变量的其他类之间的线程安全性
- 将--whole archive链接器选项与CMake和具有其他库依赖项的库一起使用
- GlobalAlloc而不是其他分配方法
- 全球安装的键盘钩可防止键盘输入其他应用程序
- 创建不需要任何进一步安装即可在其他计算机上工作的可执行文件?
- 如何在 c++ 中拆分字符串而不将其他库安装到标准 Ubuntu 版本
- 是否可以在没有安装 Office Excel 或其他先决条件框架的情况下读取 Qt 或 C++ Excel
- 如何在64位的Win 7上安装python-Levenshtein或其他C/ c++包
- 无法将 boost 安装到其他目录
- 如何在linux RHEL的其他目录下安装SDL2
- 我如何使exe可以在没有其他安装的windows上运行