- #include <stdio.h>
- #include <ctype.h>
- int Get_Number(char **input);//获取数字
- int jisuan(int n1,int n2,int fuhao);//计算结果
- int Process_Number(char *src);//控制计算和获取数字
- int Process_Kuohao(char **p);//遇到括号的处理方式
- int main()
- {
- char *c="2*(2+1)";
- char *c2="1+2+3*(2+2)";
- //Process_Kuohao(c+1);
- Process_Number(c2);
- return 0;
- }
- int Process_Number(char *src)
- {
- int num1=0,num2=0,fuhao='+';
- int length=0;
- while(*src!='\\0')
- {
- if(length!=0)
- fuhao=*src++;
- num2=Get_Number(&src);
- num1=jisuan(num1,num2,fuhao);
- length++;
- printf("src:%s,%d\\n",src, num1);
- }
- return num1;
- }
- int Process_Kuohao(char **p)
- {
- char tmp[10]={'\\0'};
- char c=0;
- int leftkuohao=1;
- int rightkuohao=0;
- int index=0;
- while((c=*(*p)++)!='\\0')
- {
- if(c=='(')
- leftkuohao++;
- else if(c==')')
- rightkuohao++;
- if(leftkuohao==rightkuohao)
- break;
- tmp[index++]=c;
- }
- tmp[index]='\\0';
- return Process_Number(tmp);
- }
- int Get_Number(char **input)
- {
- int num=0;
- int num2=0;
- char c=0;
- int fuhao='+';
- while(isdigit(c=**input))
- {
- num=10*num+c-'0';
- (*input)++;
- }
- if(c=='*'||c=='/')
- {
- fuhao=c;
- (*input)++;
- num2=Get_Number(input);
- return jisuan(num,num2,fuhao);
- }
- else if(c=='(')
- {
- (*input)++;
- return Process_Kuohao(input);
- }
- return num;
- }
- int jisuan(int n1,int n2,int fuhao)
- {
- switch(fuhao)
- {
- case '+':
- return n1+n2;
- case '-':
- return n1-n2;
- case '*':
- return n1*n2;
- case '/':
- {
- if(n2!=0)
- return n1/n2;
- }
- default:
- printf("this is invaid%d\\n",fuhao);
- break;
- }
- return 0;
- }
- //该片段来自于http://www.codesnippet.cn/detail/150720149995.html
来源: http://www.codesnippet.cn/detail/150720149995.html