class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 返回表达式的值
     * @param s string字符串 待计算的表达式
     * @return int整型
     */
    int solve(string s) {
        // write code here
        cout<<"now you are starting a jisuan !"<<endl;
        stack<int> arr;
        for(int i=0;i<s.size();i++)
        {

            if(s[i]=='(')
            {
                cout<<"调用括号中"<<endl;
            	int j=i;
                
                string str;
                int judge=1;
                j++;
                while(judge!=0)
                {
                	if(s[j]=='(')  judge++;
                    if(s[j]==')')  judge--;
                    j++;
                }
                j--;
                cout<<"i="<<i<<"  j="<<j<<endl;
                while((i+1)<j)//j=8  i=0,1
                {
                	str+=s[i+1];//输入 1 2
                    i++;     //i=1 2
                    cout<<str<<"   str"<<endl;
                }
                i=j;
                cout<<"j==在递归之后"<<j<<endl;
                arr.push(solve(str));
                cout<<"括号内的结果为 "<<arr.top()<<endl;
                continue;
            }

             if(s[i]=='+'&&s[i+1]!='(')
                {
                  int num=0;
                  i++;
                  while(i<s.size()&&s[i]!='*'&&s[i]!='-'&&s[i]!='+')
					{
						num=num*10+(s[i]-'0');
						i++;
					}
                    ///cout<<"i="<<i<<endl;
					arr.push(num);
                    i--;
                    cout<<"now top is +"<<arr.top()<<endl;
                    continue;
                }      
                    
   
			if(s[i]=='-'&&s[i+1]!='(')
                {
                  int num=0;
                   i++;
                   while(i<s.size()&&s[i]!='*'&&s[i]!='-'&&s[i]!='+')
					{
						num=num*10+(s[i]-'0');
						 i++;
					}
                    i--;
                    arr.push(0-num);    
                    cout<<"now top is -"<<arr.top()<<endl;    
                    continue;   
                }
            if(s[i]=='-'&&s[i+1]=='(')     
            {
                i++;
                
                int j=i;
                string str;
                int judge=1;
                j++;
                while(judge!=0)
                {
                	if(s[j]=='(')  judge++;
                    if(s[j]==')')  judge--;
                    j++;
                }
               j--;
               while((i+1)<j)//j=8  i=0,1
                {
                	str+=s[i+1];//输入 1 2
                    i++;     //i=1 2
                    cout<<str<<"   str"<<endl;
                }
                i=j;
                arr.push(0-solve(str));
                continue;
            }   
			
				if(s[i]=='*'&&s[i+1]!='(')
				{
					int num=0;
                    i++;
                    while(i<s.size()&&s[i]!='*'&&s[i]!='-'&&s[i]!='+')
					{
						num=num*10+(s[i]-'0');
						i++;
					}
					int ans=arr.top();
					arr.pop();
                    ans=ans*num;
                    //cout<<"jiancha chengji "<<num<<endl;
					arr.push(ans);
                    cout<<"now top is *"<<arr.top()<<endl;
                    i--;
					continue;
				}
            if(s[i]=='*'&&s[i+1]=='(')
            {
                i++;
                
                int j=i;
                string str;
                int judge=1;
                j++;
                while(judge!=0)
                {
                	if(s[j]=='(')  judge++;
                    if(s[j]==')')  judge--;
                    j++;
                }
               j--;
               while((i+1)<j)//j=8  i=0,1
               {
                	str+=s[i+1];//输入 1 2
                    i++;     //i=1 2
                    cout<<str<<"   str"<<endl;
                }
                i=j;
                arr.push(solve(str));
                int num=arr.top();
                arr.pop();
                num=num*arr.top();
                arr.pop();
                arr.push(num);
                continue;

            }
                if(s[i]!='+'&&s[i]!='-'&&s[i]!='*')
                {
                  int num=0;
                  
                  
                  while(i<s.size()&&s[i]!='*'&&s[i]!='-'&&s[i]!='+')
					{
						num=num*10+(s[i]-'0');
                        //cout<<"num start"<<num<<endl;
						i++;
					}
                    
					arr.push(num);
                    i--;
                    cout<<"now top is start"<<arr.top()<<endl;
                    continue;
                }
            
        }
        int ans=0;
        while(!arr.empty())
        {
        	 ans+=arr.top();
        	
            cout<<ans<<"ooo"<<"  "<<arr.top()<<"  "<<arr.size()<<endl;arr.pop();
        	
		}
		return ans;
}
    
};

关于括号:注意*-+()的情况------>单独讨论

调试的时候耐心一点可能比较久

试着做一下标准做法;