0

我在 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 那样安装额外的库?

4

1 回答 1

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,连同标准算法 std::copy迭代器助手 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 表达式std::remove_if。如果您没有支持 C++11 的编译器,它可以简单地被普通函数替换。

于 2013-11-14T07:58:42.640 回答