麻烦哪位大佬帮忙看看哪里错了,谢谢各位
读入一个只包含 +, -, *, / 的非负整数计算表达式,计算该表达式的值。
Input
测试输入包含若干测试用例,每个测试用例占一行,每行不超过200个字符,整数和运算符之间用一个空格分隔。没有非法表达式。当一行中只有0时输入结束,相应的结果不要输出。
Output
对每个测试用例输出1行,即该表达式的值,精确到小数点后2位。
Sample Input
1 + 2
4 + 2 * 5 - 7 / 11
0
Sample Output
3.00
13.36
```#include
using namespace std;
int si(string a)//字符串转为整数
{
int s=0;
for(int i=0;i
{
s=s*10+(a[i]-'0');
}
return s;
}
int main()
{
string str,s;vector v;
while(getline(cin,str))//获取一行字符
{
v.clear();//重置向量v
if((str.size()==1)&&(str[0]='0'))
break;//判断是否结束
for(int i=0;i
{
if(str[i]==' ')
{
if(s!="+"&&s!="-"&&s!="*"&&s!="/")
v.push_back(si(s));
else
{
if(s=="+")
v.push_back(-1);
if(s=="-")
v.push_back(-2);
if(s=="*")
v.push_back(-3);
if(s=="/")
v.push_back(-4);
}
s.clear();
continue;
}
s+=str[i];
}
v.push_back(si(s));
s.clear();
vector::iterator it;//定义迭代器
for(int i=0;i<v.size();i++)//先计算乘除
{
if(v[i]==-3)
{
v[i-1]=v[i-1]*v[i+1];
it=v.begin()+i;
v.erase(it,it+2);//两个数一个符号计算后保留结果,删去其他两位
i=0;
}
if(v[i]==-4)
{
v[i-1]=v[i-1]/v[i+1];
it=v.begin()+i;
v.erase(it,it+2);
i=0;
}
}
for(int i=0;i<v.size();i++)//计算加减
{
if(v[i]==-1)
{
v[i-1]=v[i-1]+v[i+1];
it=v.begin()+i;
v.erase(it,it+2);
i=0;
}
if(v[i]==-2)
{
v[i-1]=v[i-1]-v[i+1];
it=v.begin()+i;
v.erase(it,it+2);
i=0;
}
}//输出结果,此时v里面只剩下结果
cout<<setprecision(2)<<setiosflags(ios::fixed)<<v[0]<<endl;
}
}