鱼C论坛

 找回密码
 立即注册
查看: 1083|回复: 5

[已解决]leetcode上面这个一直显示错误,求大佬

[复制链接]
发表于 2020-9-4 11:27:07 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
leetcode上面这个一直显示错误,如图,除了这个还有说stack模板错误,请问怎么改,算法没有问题
#include<string>
#include<stack>
class Solution {
public:
    bool isValid(string s) {
        if(s.length()%2!=0)
        return false;
        Stack<char> stack=new Stack<>();
        for(char c:s.toCharArrary())
        {
            if(c=='(')
            stack.push(')');
            else if(c=='[')
            stack.push(']');
            else if(c=='{')
            stack.push('}');
            else if(stack.isEmpty()||c!=stack.pop())
            return false;
        }
        return stack.isEmpty();
    }
};
最佳答案
2020-9-4 11:38:42
我不知道你用的这个IDE是什么,但是单纯代码已经C++标准说的话

首先 没有  using namespace std  命名空间,所以找不到 string  和 stack 的定义
其次,栈 stack 是 小写 s,   你的是大写,然后  定义的栈模板变为小写了 ,建议换一下
#include<string>
#include<stack>

using namespace std;

class Solution 
{
public:
    bool isValid(string s) 
    {
        if (s.length() % 2 != 0)
            return false;

        stack<char> *Stack = new stack<char>();

        //这个 toCharArrary 我不知道你想调用哪个函数
        for (char c : s.toCharArrary())
        {
            if (c == '(')
                Stack->push(')');
            else if (c == '[')
                Stack->push(']');
            else if (c == '{')
                Stack->push('}');
            else if (Stack->empty() || c != Stack->top())
                Stack->pop();
                return false;
        }
        return Stack->empty();
    }
};


可能是因为IDE的不一样,导致模板库里面封装的函数不一样,你根据实际情况改改把
B998FEA8B2E08C60FA4FEB2DED94C4A4.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-9-4 11:38:05 | 显示全部楼层
本帖最后由 xieglt 于 2020-9-4 11:44 编辑

//什么版本编译器,难道不用using namespace?
using namespace std;
//stl 的 stack 难道不是小写吗
stack<char> mystack;
或者
stack<char> * mystack = new stack<char>;
....
delete mystack;

不建议用new
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2020-9-4 11:38:42 | 显示全部楼层    本楼为最佳答案   
我不知道你用的这个IDE是什么,但是单纯代码已经C++标准说的话

首先 没有  using namespace std  命名空间,所以找不到 string  和 stack 的定义
其次,栈 stack 是 小写 s,   你的是大写,然后  定义的栈模板变为小写了 ,建议换一下
#include<string>
#include<stack>

using namespace std;

class Solution 
{
public:
    bool isValid(string s) 
    {
        if (s.length() % 2 != 0)
            return false;

        stack<char> *Stack = new stack<char>();

        //这个 toCharArrary 我不知道你想调用哪个函数
        for (char c : s.toCharArrary())
        {
            if (c == '(')
                Stack->push(')');
            else if (c == '[')
                Stack->push(']');
            else if (c == '{')
                Stack->push('}');
            else if (Stack->empty() || c != Stack->top())
                Stack->pop();
                return false;
        }
        return Stack->empty();
    }
};


可能是因为IDE的不一样,导致模板库里面封装的函数不一样,你根据实际情况改改把
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-9-4 11:45:26 | 显示全部楼层
第五行      bool isValid(string s)

    bool isValid(std::string s)

然后 就没报这行错误了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-4 11:50:08 | 显示全部楼层
我叫MD 发表于 2020-9-4 11:38
我不知道你用的这个IDE是什么,但是单纯代码已经C++标准说的话

首先 没有  using namespace std  命名空 ...


        //这个 toCharArrary 我不知道你想调用哪个函数
这个我是想把字符串变成一个一个的字符,这样在for循环里面遍历,所以我按照你的改了,这里的 toCharArrary 错误,这里怎么改呀
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-9-4 11:54:46 | 显示全部楼层
LuLD 发表于 2020-9-4 11:45
第五行      bool isValid(string s)

    bool isValid(std::string s)

这个是oj环境下的函数体,不能修改这里
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-1-13 03:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表