SegFault函数:
[C++] 纯文本查看 复制代码 void Lexer::FormatInput()
{
// 去除所有空格
// erase_if()函数会找到所有空格,并把他们移动到字符串末尾
// 并返回一个指向最后一个非空格字符的迭代器,我们可以使用
// erase()删除这些空格字符(此代码正常)
input_.erase(std::remove_if(input_.begin(), input_.end(), isspace), input_.end());
// 去除字符串末尾的特殊符号和等号(SegFault)
// while (!std::isalnum(input_.back()) || !isOperator(input_.back())// 代码在此处segfault || input_.back() == '=') {
// input_.pop_back();
// }
}
已知是isOperator的问题,但是isOperator函数本身应该是没有问题的(在另一处能正确调用),传入的参数也是和isalmun相同的input_.back()
[C++] 纯文本查看 复制代码 bool Lexer::isOperator(char ch)
{
return ch == '+' || ch == '-' || ch == '*' || ch == '/' ||
ch == '^' || ch == '|' || ch == '(' || ch == ')';
}
|