编译器:VS2017
语言:C
基本算法网上有很多,就是用两个栈来实现。我这个算法不太好,将‘(’也入栈了,复杂了许多。我贴下源代码,供大家参考。
long char2int(char *p,char *q)
{
long result=0;
while(p!=q)
{
result=result*10+*p-48;
p=p+1;
}
return result;
}
long calculate(char* s) {
int flag = 0;
long data[1000];
char str[1000];
int top1 = -1;
int top2 = -1;
long result = 0;
char *p;
while (*s)
{
if (*s <= 57 && *s >= 48 && !flag)
{
p=s+1;
while(*p>='0'&&*p<='9')
p++;
top1++;
data[top1] = char2int(s,p);
s=p;
continue;
}
else if (*s <= 57 && *s >= 48 && flag)
{
p=s+1;
while(*p>='0'&&*p<='9')
p++;
top1++;
data[top1] = char2int(s,p);
s=p;
if (str[top2] == '+')
result = data[top1] + data[top1 - 1];
else {
result = data[top1] - data[top1 - 1];
result = 0 - result;
}
top2--;
top1--;
data[top1] = result;
flag = 0;
continue;
}
else if (*s == '+' || *s == '-')
{
top2++;
str[top2] = *s;
flag = 1;
}
else if (*s == '(')
{
top2++;
str[top2] = *s;
flag = 0;
}
else if (*s == ')')
{
top2--;
flag = 1;
if (top2 == -1)
{
s++;
continue;
}
if (str[top2] =='+')
{
result = data[top1] + data[top1 - 1];
top1--;
data[top1] = result;
top2--;
}
else if (str[top2] == '-')
{
result = data[top1] - data[top1 - 1];
result = 0 - result;
top1--;
data[top1] = result;
top2--;
}
}
s++;
}
return data[0];
}