C++ 使用堆栈从黑客等级解决平衡括号检查时出错

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

在使用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;
                 ^
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”