c++ - 验证和中缀表达式

标签 c++ algorithm function validation infix-notation

我必须编写一个方法来验证来自用户输入的给定中缀表达式,这将在 Vector ie 中。

我已经有一部分方法正在运行,它平衡了开始和结束定界符,现在我正在添加一个检查表达式语法的辅助方法,例如以下情况是程序运行时发生的情况,包括一个错误:

validate (4+5) 
returns true
validate (45+)
returns false
validate 45+ 
Vector out of range. 

我相信这是由于我对 v.at(i+1).type 的调用而发生的,但是,在添加 if 语句以返回 false 之后,如果我的 int i = v.size() && tt.type == OPERATOR,为了检查最后一个标记是运算符的情况,它仍然给出相同的 vector 超出范围错误。

关于为什么会发生此错误的任何输入?

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;
}

最佳答案

当您尝试处理一个 OPERATOR 时,您期待 token vector 中的 1 个元素。您需要做的是检查以确保您没有引用标记 vector 的末尾。添加显式检查,例如:

if (i+1 >= v.size()) {
// code to handle final token being an operator
}

在检查下一个标记的 if 语句之前。

关于c++ - 验证和中缀表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18991618/

相关文章:

JavaScript:if else 内的变量未定义

function - Haskell 模式匹配在负数上失败

c++ - 模板类型名作为同一模板的其他参数的类型

c++ - 试图读取充满对象的 vector 的访问冲突

未识别 C++ Windows 跳转列表类

algorithm - 这段代码可能进入无限循环的时间复杂度是多少?

swift - 归并排序算法效率

arrays - 将哈希表转换为 O(log(k)*k + n) 中的排序数组

javascript - 将类添加到侧边栏中的事件分类链接

c++ - 如何将二维数组作为只读传递给双指针函数?