# 基本计算器

<p>给你一个字符串表达式 <code>s</code> ，请你实现一个基本计算器来计算并返回它的值。</p>

<p> </p>

<p><strong>示例 1：</strong></p>

<pre>
<strong>输入：</strong>s = "1 + 1"
<strong>输出：</strong>2
</pre>

<p><strong>示例 2：</strong></p>

<pre>
<strong>输入：</strong>s = " 2-1 + 2 "
<strong>输出：</strong>3
</pre>

<p><strong>示例 3：</strong></p>

<pre>
<strong>输入：</strong>s = "(1+(4+5+2)-3)+(6+8)"
<strong>输出：</strong>23
</pre>

<p> </p>

<p><strong>提示：</strong></p>

<ul>
	<li><code>1 <= s.length <= 3 * 10<sup>5</sup></code></li>
	<li><code>s</code> 由数字、<code>'+'</code>、<code>'-'</code>、<code>'('</code>、<code>')'</code>、和 <code>' '</code> 组成</li>
	<li><code>s</code> 表示一个有效的表达式</li>
</ul>


## template

```cpp
#include <bits/stdc++.h>
using namespace std;

class Solution
{
public:
    int calculate(string s)
    {
        stack<int> myStack;
        stack<char> myOperator;
        int i;
        for (i = 0; i < s.length(); i++)
        {
            while (i < s.length() && s[i] == ' ')
                i++;
            if (i == s.length())
                break;
            if (s[i] == '+' || s[i] == '-' || s[i] == '(')
                myOperator.push(s[i]);
            else if (s[i] == ')')
            {
                while (myOperator.top() != '(')
                {
                    int element1 = myStack.top();
                    myStack.pop();
                    int element2 = myStack.top();
                    myStack.pop();
                    char op = myOperator.top();
                    myOperator.pop();
                    if (op == '+')
                        myStack.push(element1 + element2);
                    else if (op == '-')
                        myStack.push(element2 - element1);
                }
                if (!myOperator.empty())
                    myOperator.pop();
                while (!myOperator.empty() && (myOperator.top() != '('))
                {
                    int element1 = myStack.top();
                    myStack.pop();
                    int element2 = myStack.top();
                    myStack.pop();
                    char op = myOperator.top();
                    myOperator.pop();
                    if (op == '+')
                        myStack.push(element1 + element2);
                    else if (op == '-')
                        myStack.push(element2 - element1);
                }
            }
            else
            {

                long long int number = 0;
                int j = i;
                while (j < s.length() && (s[j] - '0' <= 9) && (s[j] - '0' >= 0))
                {
                    number = number * 10 + (s[j] - '0');
                    j++;
                }
                i = j - 1;
                myStack.push(number);
                while (!myOperator.empty() && (myOperator.top() != '('))
                {
                    int element1 = myStack.top();
                    myStack.pop();
                    int element2 = myStack.top();
                    myStack.pop();
                    char op = myOperator.top();
                    myOperator.pop();
                    if (op == '+')
                        myStack.push(element1 + element2);
                    else if (op == '-')
                        myStack.push(element2 - element1);
                }
            }
        }
        return myStack.top();
    }
};

```

## 答案

```cpp

```

## 选项

### A

```cpp

```

### B

```cpp

```

### C

```cpp

```