//一个递归的函数,遇到一对括号,就调用自身
//计算()整体所代表的值
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);  
}