C++ 使用堆栈从黑客等级解决平衡括号检查时出错
在使用stack解决黑客等级的平衡括号检查时,我得到的错误是:C++ 使用堆栈从黑客等级解决平衡括号检查时出错,c++,stack,C++,Stack,在使用stack解决黑客等级的平衡括号检查时,我得到的错误是: Solution.cpp: In function ‘std::__cxx11::string isBalanced(std::__cxx11::string)’: Solution.cpp:7:17: error: control reaches end of non-void function [-Werror=return-type] stack<char> c; ^ c
Solution.cpp: In function ‘std::__cxx11::string isBalanced(std::__cxx11::string)’:
Solution.cpp:7:17: error: control reaches end of non-void function [-Werror=return-type]
stack<char> c;
^
cc1plus: some warnings being treated as errors
Solution.cpp:在函数“std::_cxx11::string isBalanced(std::_cxx11::string)”中:
Solution.cpp:7:17:错误:控件到达非无效函数的末尾[-Werror=返回类型]
堆栈c;
^
cc1plus:某些警告被视为错误
但它在CodeChef编译器上运行良好
string isBalanced(string s) {
stack<char> c;
for(int i=0;s[i]!='\0';i++)
{
if(s[0]=='}' || s[0]==')' || s[0]==']')
return "NO";
else if(s[i]=='{' || s[i]=='(' || s[i]=='[')
{
c.push(s[i]);
}
else if((c.top()=='{' && s[i]=='}') || (c.top()=='(' && s[i]==')') || (c.top()=='[' && s[i]==']')){
c.pop();
}
else
return "NO";
}
if (c.empty())
return "YES";
}
字符串已平衡(字符串s){
堆栈c;
对于(int i=0;s[i]!='\0';i++)
{
如果(s[0]='}'| | s[0]=')'| | s[0]='])
返回“否”;
else如果(s[i]='{'| | s[i]='='('| | s[i]='['))
{
c、 推(s[i]);
}
else如果((c.top()='{'&&s[i]='}')|;(c.top()='('&&s[i]='))| |(c.top()='['&&s[i]='])){
c、 pop();
}
其他的
返回“否”;
}
if(c.empty())
返回“是”;
}
正如错误消息所说,函数并不总是返回值。如果函数末尾的堆栈不为空,则可以通过返回“否”来修复此问题:
if (c.empty())
return "YES";
return "NO";
请注意,“否”的返回值仅在未返回“是”的情况下才会返回。如错误消息所述,您的函数并不总是返回值。如果您的堆栈在函数末尾不是空的,您可以通过返回“否”来修复此问题:
if (c.empty())
return "YES";
return "NO";
请注意,“否”的返回值仅在“是”的情况下返回未返回。请始终发布一条我们可以自己运行的信息,而不是不完整的代码段。如果在函数末尾,c
实际上不是空的,则函数到达右大括号,并且不返回任何内容。因此,您的程序会显示未定义的行为。您的函数需要返回一条string,这在某些条件检查序列中可能不会执行。请始终发布一条消息,说明我们可以自己运行,而不是不完整的代码段。如果在函数末尾,c
实际上不是空的,则函数到达右大括号,并且不返回任何内容。因此,您的程序会显示未定义的行为。您的函数需要返回一个字符串,在某些条件检查序列中可能不会返回该字符串。if
下的返回后的else
非常冗余。if(c.empty())返回“YES”;返回“NO”if
下的return
后面的else
非常冗余。if(c.empty())返回“YES”;返回“NO”