我在c ++编程方面比较陌生,所以如果我犯了任何常见的错误,请耐心等待。
我有一个看起来像这样的字符串:
String str = "[abc, abcde, lkejs, abde], [123, 456, 7890]"
我希望将每个值存储到一个向量中,使其看起来像:
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那样安装额外的库?
答案 0 :(得分:2)
第一部分是删除括号和逗号,对于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
,standard algorithm std::copy
和iterator helpers 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 expression。如果您没有支持C ++ 11的编译器,它可以简单地用普通函数替换。