如何解决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;
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。