菜鸟的程序,运行不对,大家帮帮忙!!编译过,但是一运行就出错(计算器)
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class sum
{
public:
sum():s1("0123456789"),s2("+-*/"){}
float result();
private:
string s1,s2;
};
float sum::result()
{
char c;
vector<char> vec1,vec2;
vector<int>vec3;
cout<<"请输入表达式:"<<endl;
while(c=getchar()!='\n')
{
if(s1.find(c)!=string::npos)vec1.push_back(c);//如果是数字则存入到vec1中
if(s2.find(c)!=string::npos)//如果是运算符要么入栈,要么与栈里的比较
{
if(c=='*'||c=='/')vec2.push_back(c);
else
{
while(!vec2.empty()&&vec2.back()!='*'&&vec2.back()!='/')//直到遇到比它级别高
{
vec1.push_back(vec2.back());
vec2.pop_back();
}
vec2.push_back(c);
}
}
if(c=='(')
vec2.push_back(c);
if(c==')')//一直退到左括号
{
while(vec2.back()!='(')
{
vec1.push_back(vec2.back());
vec2.pop_back();
}
vec2.pop_back();//左括号退栈
}
}
while(!vec2.empty())//最后把vec2中的复制到vec1中形成后缀式
{
vec1.push_back(vec2.back());
vec2.pop_back();
}
vector<char>::iterator iter=vec1.begin();
while(iter!=vec1.end())
{
if(s1.find(*iter)!=string::npos)//为数字
{
*iter=*iter-'0';//转换为整型
vec3.push_back(*iter);
}
else if(*iter=='+')
{
int a=vec3.back();
vec3.pop_back();
int b=vec3.back();
vec3.pop_back();
int c=b+a;
vec3.push_back(c);
}
else if(*iter=='-')
{
int a=vec3.back();
vec3.pop_back();
int b=vec3.back();
vec3.pop_back();
int c=b-a;
vec3.push_back(c);
}
else if(*iter=='*')
{
int a=vec3.back();
vec3.pop_back();
int b=vec3.back();
vec3.pop_back();
int c=b*a;
vec3.push_back(c);
}
else if(*iter=='/')
{
int a=vec3.back();
vec3.pop_back();
int b=vec3.back();
vec3.pop_back();
int c=b/a;
vec3.push_back(c);
}
}
return vec3.back();
}
int main()
{
sum a;
cout<<a.result()<<endl;
system("pause");
return 0;
}
[解决办法]
有两个问题:
一、第一个while循环:
while((c=getchar())!='\n')
不是
while(c=getchar()!='\n')
二、
最后一个while循环第一个if语句:
if(s1.find(*iter)!=string::npos)//为数字
{
*iter=*iter-'0';//转换为整型
vec3.push_back(*iter);
}
应该改为:
if(s1.find(*iter)!=string::npos)//
{
int i=*iter-'0';
vec3.push_back(i);
}