实现一个基本的计算器来计算一个简单的字符串表达式 s 的值。
示例 1:
输入:s = " 2-1 + 2 "
输出:3
示例2:
输入:s="(1+(4+5+2)-3)+(6+8)"
输出:23
示例3:
输入:s=“2147483647”
输出:2147483647
示例4:
输入:s="-2+ 1"
输出:-1
示例5:
输入:s=“1-11”
输出:-10
C语言计算模块代码如下:
#define max 1000
int calculate(char * s)
{
char stack1[max],ch;
int stack2[max];
int top1=-1,top2=-1,i,a,b,j,flag=0,sum=0;
for(i=0;s[i]!='\0';i++)
{
if(s[i]=='(')
stack1[++top1]=s[i];
else if(s[i]=='+'||s[i]=='-')
{
flag=1;//进行过运算
if(top1!=-1&&(stack1[top1]=='+'||stack1[top1]=='-'))
{
ch=stack1[top1--];
b=stack2[top2--];
if(top2!=-1)
a=stack2[top2--];
else //+/-为正负号
a=0;
if(ch=='+')
stack2[++top2]=a+b;
else
stack2[++top2]=a-b;
}
stack1[++top1]=s[i];
}
else if(s[i]==')')
{
while(stack1[top1]!='(')
{
ch=stack1[top1--];
b=stack2[top2--];
a=stack2[top2--];
if(ch=='+')
stack2[++top2]=a+b;
else
stack2[++top2]=a-b;
}
--top1;
}
else if(s[i]>='0'&&s[i]<='9')//转换为整数再进栈
{
if(i>0&&(s[i-1]>='0'&&s[i-1]<='9'))//十位数以上
{
j=stack2[top2--];
j=j*10+(s[i]-'0');
stack2[++top2]=j;
}
else
stack2[++top2]=s[i]-'0';
}
}
while(top1>-1)
{
ch=stack1[top1--];
b=stack2[top2--];
if(top2!=-1)
a=stack2[top2--];
else
a=0;
if(ch=='+')
stack2[++top2]=a+b;
else
stack2[++top2]=a-b;
}
for(i=0;flag==0&&i<=top2;i++)//未进行过运算,纯数字处理
sum=sum*10+(stack2[i]);
if(flag&&top2>-1)
sum=stack2[top2--];
return sum;
}