【发布时间】:2015-08-08 20:55:44
【问题描述】:
我正在尝试编写一个简短而愚蠢的方程解析器,并且需要围绕给定的运算符拆分一个字符串。我可以通过
拆分字符串的右侧return std::string(oprtr + 1, equ.end());
其中 equ 是字符串,而 oprtr 是我需要从中拆分的位置的迭代器。这样做很完美,但是从左边分开却不行:
return std::string(equ.begin(), oprtr - 1);
====
terminate called after throwing an instance of 'std::length_error'
what(): basic_string::_S_create
我尝试了很多其他我并不引以为豪的讨厌的变通方法,比如
return equ.substr(0, std::distance(equ.begin(), oprtr));
这不会给出错误,但实际上只是返回整个方程。我在这里做错了什么?
【问题讨论】:
-
没有足够的代码来解决这个问题。什么是操作?
-
optrr 是一个迭代器,指向我需要从中拆分的位置。抱歉,我会将其添加到问题文本中。
-
return std::string(equ.begin(), oprtr);和return std::string(oprtr + 1, equ.end());在我看来是正确的。不知道为什么要从结束位置减去一个。 -
需要从结束位置减去一个,因为我不希望包含运算符本身。在任何情况下,
return std::string(equ.begin(), oprtr);是我想使用的主要,但仍然抛出上述错误。 -
@Sourec 您无需减去一个即可不包含运算符。我认为需要阅读迭代器范围。 string(i, j) 创建一个从 i 开始直到 但不包括 j的字符串。