我必须编写一个方法来验证来自用户输入的给定中缀表达式,该输入将在 Vector 中,即。
我已经运行了平衡打开和关闭分隔符的方法的一部分,现在我正在添加一个检查表达式语法的辅助方法,例如以下情况是程序运行时发生的情况,包括错误:
validate (4+5)
returns true
validate (45+)
returns false
validate 45+
Vector out of range.
我相信这是由于我对 的调用而发生的v.at(i+1).type
,但是,在添加 if 语句以返回false
if myint i = v.size() && tt.type == OPERATOR
以检查最后一个标记是运算符的情况后,它仍然给出了相同的向量超出范围错误。
关于为什么会发生此错误的任何输入?
bool isValArith(vector<Token> v){
bool lol;
Token tt;
stack<Token> st;
for (int i = 0; i < v.size(); i++){
tt= v.at(i);
if (tt.type != OPERATOR && tt.value != "[" && tt.value != "(" &&
tt.value != "{" && tt.value != "}" && tt.value != ")" &&
tt.value != "]"){
st.push(tt);
}
if (tt.type == OPERATOR){
if (st.top().type != OPERATOR && v.at(i+1).type != OPERATOR &&
v.at(i+1).value != "[" && v.at(i+1).value != "{" &&
v.at(i+1).value != "(" && v.at(i+1).value != "}" &&
v.at(i+1).value != "]" && v.at(i+1).value != ")"){
lol = true;
cout << "here" << endl;
}
else {
cout << "Error: Invalid Expression" << endl;
lol = false;
}
}
}
return lol;
}