#include<iostream>
#include<string>
#include<stack>
#include<cmath>
using namespace std;
class jisuanqi
{
private:
string a;
stack <int>s;
stack<char>f;
public:
jisuanqi()
{
a = "3+2*(5+1)=";
}
void jisuan();
int youxianji(char a);
int suan(char a,int xia,int shang);
};
int jisuanqi::suan(char a,int xia,int shang)
{
switch (a)
{
case '+':return xia + shang;
case '-':return xia - shang;
case '/':return xia / shang;
case '*': return xia * shang;
}
}
int jisuanqi::youxianji(char a)
{
switch (a)
{
case ')': return 0;
break;
case '+':return 1;
break;
case '-':return 1;
break;
case '*':return 2;
break;
case '/':return 2;
break;
case '(':return 3;
break;
default:
return -1000;
cout << "符号输入错误";
}
}
void jisuanqi::jisuan()
{
char* b = &a[0];
while (*b != '=')
{
int num = 0;
int k = 0;
if (*b >= '0' && *b <='9')
{
char* c = (b + 1);
while (*c <= '9' && *c>='0')
{
num++;
c = (c + 1);
}
while (num != 0)
{
k = k + (int(*b)-48) * pow(10, num);
num--;
b++;
}
s.push(k + int(*b)-48);
b++;
}
else
{
if(f.top()=='(')
{
f.push(*b);
b++;
continue;
}
if(f.top()=='('&&*b==')')
{
f.pop();
b++;
continue;
}
if (f.empty())
{
f.push(*b);
b++;
continue;
}
else if (!f.empty()&&youxianji(f.top() )>= youxianji(*b))
{
int t = s.top();
s.pop();
int r = s.top();
s.pop();
s.push(suan(f.top(), r, t));
f.pop();
}
else if (!f.empty()&&youxianji(f.top()) < youxianji(*b))
{
f.push(*b);
}
b++;
}
}
while(!f.empty()&&!s.empty())
{
int q = s.top();
s.pop();
int z = s.top();
s.pop();
s.push(suan(f.top(), z, q));
f.pop();
}
cout << s.top();
return;
}
int main()
{
jisuanqi x;
x.jisuan();
system("pause");
return 0;
}
简易计算器,请问,错误大概是什么类型的?如何解决?