/*************************************************************************
> Created Time: 2014年06月18日
************************************************************************/
#include<stdio.h>
#include<string.h>double arithmetic(char *str)
{
if(str == NULL)return -1;
char token_stack[100];
double num_stack[100];
int token_index =0, num_index = 0;
int len = strlen(str);
for(int i = 0; i < len; i++)
{
if(*(str+i) >= '0' && *(str+i) <= '9')
{
num_stack[num_index++] = *(str+i)-'0';
continue;
}
if(*(str+i) == '+' || *(str+i) == '-')
{
token_stack[token_index++] = *(str+i);
continue;
}
if(*(str+i) == '*')
{
num_stack[num_index-1] = num_stack[num_index-1] * (*(str+i+1)-'0');
i++;
continue;
}
if(*(str+i) == '/')
{
num_stack[num_index-1] = num_stack[num_index-1] / (*(str+i+1)-'0');
i++;
continue;
}
}
num_index--;
for(int i = token_index-1; i >= 0; i--)
{
if(token_stack[i] == '+')
{
num_stack[--num_index] = num_stack[num_index] + num_stack[num_index+1];
continue;
}
if(token_stack[i] == '-')
{
num_stack[--num_index] = num_stack[num_index] - num_stack[num_index+1];
continue;
}
}
return num_stack[0];
}
int main()
{
char str[100];
printf("请输入一个字符串:\n");
scanf("%s",str);
printf("%f\n",arithmetic(str));
return 0;
}
#include <stdio.h>
#include <string.h>
int calc(const char *s, const char *e)
{
int layer = 0;
const char *p;
for (p = e; p >= s; --p) {
switch (*p) {
case ')': ++layer; break;
case '(': --layer; break;
case '+':
if (0 == layer) return calc(s, p - 1) + calc(p + 1, e);
break;
case '-':
if (0 == layer) return calc(s, p - 1) - calc(p + 1, e);
break;
}
}
for (p = e; p >= s; --p) {
switch (*p) {
case ')': ++layer; break;
case '(': --layer; break;
case '*':
if (0 == layer) return calc(s, p - 1) * calc(p + 1, e);
break;
case '/':
if (0 == layer) return calc(s, p - 1) / calc(p + 1, e);
break;
}
}
if ('(' == *s && ')' == *e) return calc(s + 1, e - 1);
return atoi(s);
}