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

32

我有一个程序,预计将以几个选项作为输入,以 (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?> 部分。由于我需要忽略开头和结尾的括号,所以我想要做像这样的事情:

请注意上面的 <what to put here?> 部分。由于我需要忽略开头和结尾的括号,因此我想要执行类似以下操作:

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

但是看起来substr不是这样工作的,并且我在文档中找不到可以实现此操作的函数。

我想到的一个想法是使用迭代器算术运算(如果允许)并使用substr进行调用。

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

不过我不确定这是否被允许,或者这是一个合理的操作方式。如果这不是有效的方法,那有什么更好的方法呢?......非常感谢。

1个回答

65

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

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

对于寻求者:重载号6在此处(https://en.cppreference.com/w/cpp/string/basic_string/basic_string):) - LRDPRDX

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接