c++中左边的分割字符串
Split string on the left in C++
我想写一个简短而愚蠢的方程解析器,需要在给定的操作符周围分割字符串。我可以通过
来分割字符串的右侧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));
这个不给出错误,但实际上只是返回整个方程。我哪里做错了?
适用于我的g++ 4.8.2
:
#include <string>
#include <algorithm>
#include <iostream>
int main() {
std::string eq("a+b=c");
std::string::iterator opit = std::find(eq.begin(),eq.end(),'=');
std::string lhs = std::string(eq.begin(),opit);
std::cout << "lhs: " << lhs << "n";
return 0;
}
输出如下:lhs: a+b
似乎你在做这样的事情
void my_func(string equ, string::iterator oprtr)
{
string left = std::string(equ.begin(), oprtr);
}
string::iterator oprtr = equ.find('=');
my_func(equ, oprtr);
这将不起作用,因为在my_func
中,您有两个迭代器到不同的字符串。因为当您调用my_func
时,会复制原始字符串。
void my_func(string& equ, string::iterator oprtr)
另一个修复方法是使用整数代替迭代器。整数不像迭代器那样绑定到一个特定的字符串实例。
相关文章:
- 如何在C++中从字符串中分割字符
- 由cin中的字符串中未捕获空白引起的分割错误
- 按分度分割字符串
- 分割故障:核心倾倒C 矢量对字符串:
- 我应该使用哪个函数来分割字符串
- 如何使用STL分割字符串
- C++如何使用多个分隔符分割字符串流
- 根据分度分割字符串
- 在空格上有选择地分割字符串
- 分割字符串作为邻接矩阵索引
- 用空格分割字符串,但只得到第一个单词
- c++中使用换行符分割字符串
- Std::locale按特定字符分割字符串而不忽略它
- 分割字符串并在不同的分隔符之前获取值
- 如果字符串包含多个 ,如何在每25个换行符( )上分割字符串
- Regex每两个字符分割字符串
- c++中左边的分割字符串
- 在c++中使用字符串(搜索字符串,分割字符串,cout<<字符串)
- 分割字符串
- 使用getline和while循环分割字符串