//一个递归的函数,遇到一对括号,就调用自身
//计算()整体所代表的值
static int GlobalIndex=0;
//MyCalulate单纯地以为这个世界没有括号,遇到括号就递归
//正常的情况是,取一个操作,然后取一个操作数,迭代
//ret +value -value +vale -value
int MyCalulate(char* s)
{
int ret=0;
int i=GlobalIndex;
char CurChar=s[i];
int op=-1;
int value=0;
char ValueStr[11];
int ValueIndex=0;
int NewFuncValue=0;
//+- ()0-9
//初始化
if(CurChar=='+')
{
printf("违法输入");
return -1;
}
else if(CurChar=='-')
{
op=0;
i++;
}
else
{
op=1;
}
CurChar=s[i++];
while(CurChar!='\0'&&CurChar!=')')
{
//在进行下一次操作前,结算上一次操作
if(CurChar=='+')
{
if(NewFuncValue==1)
{
NewFuncValue=0;
}
else
{
ValueStr[ValueIndex]='\0';
value=atoi(ValueStr);
ValueIndex=0;
}
if(op==1)
ret+=value;
else
ret-=value;
op=1;
}
else if(CurChar=='-')
{
if(NewFuncValue==1)
{
NewFuncValue=0;
}
else
{
ValueStr[ValueIndex]='\0';
value=atoi(ValueStr);
ValueIndex=0;
}
if(op==1)
ret+=value;
else
ret-=value;
op=0;
}
else if(CurChar>='0'&&CurChar<='9')
{
ValueStr[ValueIndex++]=CurChar;
}
else if(CurChar=='(')
{
GlobalIndex=i;
value=MyCalulate(s);
NewFuncValue=1;
i=GlobalIndex;
}
CurChar=s[i++];
}
if(NewFuncValue==0)
{
ValueStr[ValueIndex]='\0';
value=atoi(ValueStr);
}
if(op==1)
ret+=value;
else
ret-=value;
GlobalIndex=i;
return ret;
}
//s不动,前进index
int calculate(char* s ) {
//s本身被一个超大的括号包围着
return MyCalulate(s);
}
//计算()整体所代表的值
static int GlobalIndex=0;
//MyCalulate单纯地以为这个世界没有括号,遇到括号就递归
//正常的情况是,取一个操作,然后取一个操作数,迭代
//ret +value -value +vale -value
int MyCalulate(char* s)
{
int ret=0;
int i=GlobalIndex;
char CurChar=s[i];
int op=-1;
int value=0;
char ValueStr[11];
int ValueIndex=0;
int NewFuncValue=0;
//+- ()0-9
//初始化
if(CurChar=='+')
{
printf("违法输入");
return -1;
}
else if(CurChar=='-')
{
op=0;
i++;
}
else
{
op=1;
}
CurChar=s[i++];
while(CurChar!='\0'&&CurChar!=')')
{
//在进行下一次操作前,结算上一次操作
if(CurChar=='+')
{
if(NewFuncValue==1)
{
NewFuncValue=0;
}
else
{
ValueStr[ValueIndex]='\0';
value=atoi(ValueStr);
ValueIndex=0;
}
if(op==1)
ret+=value;
else
ret-=value;
op=1;
}
else if(CurChar=='-')
{
if(NewFuncValue==1)
{
NewFuncValue=0;
}
else
{
ValueStr[ValueIndex]='\0';
value=atoi(ValueStr);
ValueIndex=0;
}
if(op==1)
ret+=value;
else
ret-=value;
op=0;
}
else if(CurChar>='0'&&CurChar<='9')
{
ValueStr[ValueIndex++]=CurChar;
}
else if(CurChar=='(')
{
GlobalIndex=i;
value=MyCalulate(s);
NewFuncValue=1;
i=GlobalIndex;
}
CurChar=s[i++];
}
if(NewFuncValue==0)
{
ValueStr[ValueIndex]='\0';
value=atoi(ValueStr);
}
if(op==1)
ret+=value;
else
ret-=value;
GlobalIndex=i;
return ret;
}
//s不动,前进index
int calculate(char* s ) {
//s本身被一个超大的括号包围着
return MyCalulate(s);
}