在两个迭代器之间获取`std :: string`的子字符串

时间:2012-04-04 03:03:41

标签: c++ string parsing

我有一个程序,可以将一些选项作为输入来指定表单中的概率(p1,p2,p3,...)。所以命令行的用法实际上就是:

./myprog -dist (0.20, 0.40, 0.40)

我想在C ++中解析这样的列表,我目前正在尝试使用std :: string类型的迭代器和Boost提供的split函数。

// Assume stuff up here is OK
std::vector<string> dist_strs; // Will hold the stuff that is split by boost.
std::string tmp1(argv[k+1]);   // Assign the parentheses enclosed list into this std::string.

// Do some error checking here to make sure tmp1 is valid.

boost::split(dist_strs,  <what to put here?>   , boost::is_any_of(", "));

请注意<what to put here?>部分。由于我需要忽略开头和结尾的括号,我想做一些像

这样的事情
tmp1.substr( ++tmp1.begin(), --tmp1.end() )

但看起来substr看起来不像这样,我在文档中找不到一个能够做到这一点的函数。

我有一个想法是做迭代器算术,如果允许的话,并使用substr来调用

tmp1.substr( ++tmp1.begin(), (--tmp1.end()) - (++tmp1.begin()) )

但我不确定这是否允许,或者是否是合理的方法。如果这不是一个有效的方法,那么更好的方法是什么? ...非常感谢提前。

1 个答案:

答案 0 :(得分:52)

std::string的构造函数应该提供您需要的功能。

std::string(tmp1.begin() + 1, tmp1.end() - 1)