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;
}
};
关于括号:注意*-+()的情况------>单独讨论
调试的时候耐心一点可能比较久
试着做一下标准做法;

京公网安备 11010502036488号