太菜了,写复杂了,先将表达式转换成逆波兰,再进行的运算
class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     * 返回表达式的值
     * @param s string字符串 待计算的表达式
     * @return int整型
     */
    int solve(string s) {
        // write code here
        stack  stack1;
        stack q;
        vector str;
        string s1 = "";
        for (int i = 0; i < s.size(); i++ ) {
            if (s[i] == '+' || s[i] == '-' || s[i] == '*' ) {

                if (s1.size() > 0) {
                    str.push_back(s1);
                    s1 = "";
                }
                if (i == 0) {
                    s1 +='-';
                }else if (stack1.empty()){
//                     cout << s[i] << " ";
                    stack1.push(s[i] );
                }else if (s[i] < stack1.top()) {
//                     cout << "121";
                    stack1.push(s[i]);
                }else if (s[i] > stack1.top()) {

                    while (true) {
                        char a = stack1.top();
                        if (a == '(')break;
                        if (a > s[i])break;
                        string ssss ;
                        ssss+= a;
                        str.push_back(ssss);
                        stack1.pop();
                        if (stack1.size() == 0)break;
                    }
                    stack1.push(s[i]);
                }else if (s[i] == stack1.top()) {
                    char a = stack1.top();
                    string ssss ;
                    ssss+= a;
                    str.push_back(ssss);
                    stack1.pop();
                    stack1.push(s[i]);
                }
            }else if (s[i] == '(') {
                stack1.push('(');
            }else if (s[i] == ')') {
                str.push_back(s1);
                s1 = "";
                while (true) {

                    char a = stack1.top();
//                     cout << a << "=a";
                    if (a == '('){
                        stack1.pop();
                        break;
                    }

                    string ssss ;
                    ssss+= a;

                    str.push_back(ssss);

                    stack1.pop(); 

                    if (stack1.size() == 0)break;
                }
//                 stack1.pop();
            }else {
                s1 += s[i];
            }
        }
        str.push_back(s1);
//         cout << ssss;
        while (!stack1.empty()) {
            char a = stack1.top();
            string ssss ;
            ssss+= a;
            str.push_back(ssss);
            stack1.pop();
        }
//         str.push_back(ssss + "");
        for (string ss : str) {
            cout << ss << "";
        }
        cout << "\n";
        int i = 0;
        for (string ss : str) {
//             cout << i++ << "\n";
            if(ss != ""){
                if (ss != "+" && ss != "-" && ss != "*") {
                q.push(atoi(ss.c_str()));
//                 cout << atoi(ss.c_str()) << " " << ss << "\n";
            } else{
                if (ss == "+") {
                    int a = q.top();
                    q.pop();
                    int b = q.top();
                    q.pop();
                    q.push(b + a);
                    cout << q.top();
                }else if (ss == "-") {
                    int a = q.top();
                    q.pop();
                    int b = q.top();
                    q.pop();
                    q.push(b - a);
                    cout << q.top() << " ";
                }else if (ss == "*") {
                    int a = q.top();
                    q.pop();
                    int b = q.top();
                    q.pop();
                    q.push(b * a);
                    cout << q.top();
                }
            }
            }

        }

        return q.top();
        return 0;
    }
};