栈学习----------------迷你语法分析器

/**

 * // This is the interface that allows for creating nested lists.

 * // You should not implement it, or speculate about its implementation

 * class NestedInteger {

 *   public:

 *     // Constructor initializes an empty nested list.

 *     NestedInteger();

 *

 *     // Constructor initializes a single integer.

 *     NestedInteger(int value);

 *

 *     // Return true if this NestedInteger holds a single integer, rather than a nested list.

 *     bool isInteger() const;

 *

 *     // Return the single integer that this NestedInteger holds, if it holds a single integer

 *     // The result is undefined if this NestedInteger holds a nested list

 *     int getInteger() const;

 *

 *     // Set this NestedInteger to hold a single integer.

 *     void setInteger(int value);

 *

 *     // Set this NestedInteger to hold a nested list and adds a nested integer to it.

 *     void add(const NestedInteger &ni);

 *

 *     // Return the nested list that this NestedInteger holds, if it holds a nested list

 *     // The result is undefined if this NestedInteger holds a single integer

 *     const vector<NestedInteger> &getList() const;

 * };

 */

class Solution {

public:

    NestedInteger deserialize(string s) 

    {

        stack<NestedInteger*> res;

        string temp = "";

        string num = "-0123456789";

        for(int i = 0;i < s.size();i++)

        {

            if(num.find(s[i]) != -1)

            {

                temp += s[i];

            }

            else if(s[i] == ',')

            {

                if(temp != "")

                {

                    NestedInteger* top = res.top();

                    top->add(NestedInteger(atoi(temp.c_str())));

                    res.pop();

                    res.push(top);

                }

                temp = "";

            }

            else if(s[i] =='[')

            {

                NestedInteger* list = new NestedInteger ();

                res.push(list);

            }

            else

            {

                if(temp != "")

                {

                    NestedInteger* top = res.top();

                    top->add(NestedInteger(atoi(temp.c_str())));

                    res.pop();

                    res.push(top);

                }

                temp = "";

                NestedInteger* top = res.top();

                res.pop();

                if(res.empty())

                {

                    return *top;

                }

                else

                {

                    NestedInteger* p = res.top();

                    p->add(*top);

                    res.pop();

                    res.push(p);

                }

            }

        }

        return NestedInteger(atoi(temp.c_str()));

    }

};

ps:没做出来,然后知道了可以直接用s.top() = 这样去更改,而不用向上述一样麻烦改动。

比如res.top->add(NestedInteger(stoi(temp)));

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值