C ++-二进制表达式的无效操作数“ char”和“ void”

问题描述

为什么我收到有关leetcode问题20的错误。有效的括号。我试图解决它,但是失败了。

第15行:char 23:致命错误:二进制表达式的无效操作数(“ char”和“ void”) 否则if(c!= st.pop())
产生1个错误

代码

class Solution {
public:
    bool isValid(string s) {
        if(s.length() == 0)
            return true;
        stack<char> st;
        for(char &c : s)
        {           
            if(c == '(')
                st.push(')');
            else if(c == '[')
                st.push(']');
            else if(c == '{')
                st.push('}');
            else if(st.empty() || c != st.pop())
                return false;
        }
        return st.empty();
    }
};

我将堆栈设置为char类型,但似乎将其视为空类型?


修改
正确的代码是:

class Solution {
public:
    bool isValid(string s) {
        if(s.length() == 0)
            return true;
        stack<char> st;
        for(char &c : s)
        {           
            if(c == '(')
                st.push(')');
            else if(c == '[')
                st.push(']');
            else if(c == '{')
                st.push('}');
            else if(st.empty() || c != st.top())
                return false;
            else
                st.pop();
        }
        return st.empty();
    }
};

解决方法

std::stack::pop()没有返回值。

当您执行c != st.pop()时,编译器会看到“ char的值与void的值进行比较”,这毫无意义。

可能的解决方案是先从顶部将值获取到temp变量,然后再获取pop()并至少对其进行比较:

            else {
                if (st.empty()) 
                    return false;
                char temp = st.top();
                st.pop();
                if(c != temp)
                    return false;
            }