带括号四则运算器算法

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include
#include


using namespace std;


float numX(string num1,string num2,string p)//根据字符串 p 计算两个数num1,num2的值
{
float n1 =atof(num1.c_str());
float n2 =atof(num2.c_str());

if(p=="+")
{
return (n1+n2);
}else if(p=="-")
{
return (n1-n2);
}else if(p=="*")
{
return (n1*n2);
}else if(p=="/")
{
if(n2=0)
{
cout<<"错误!被除数为0!";
return 0;
}else
{
return (n1/n2);
}

}else
{
return 0;
}


}
string wordX(string s) //计算不带括号的四则运算表达式
{
string p="",str1="",str2="";
int pop=0;
stringstream stream;
string str;

for(int i =0;i!=s.length();++i)
{
if(s[i]=='#')
{
stream<stream>>str;

if(p=="")
{
return str2;
}
else if(p=="*"||p=="/")
{
s.replace(pop,i-pop,str);
return wordX(s);
}else
{
return str;
}


}else if(s[i]=='+'||s[i]=='-')
{
if(p=="")
{
p=s[i];
str1=str2;
str2="";
pop=i+1;
}
else if(p=="*"||p=="/")
{
stream<stream>>str;
s.replace(pop,i-pop,str);
return wordX(s);
}else
{
stream<stream>>str;
cout<<"str:"<s.replace(0,i,str);
return wordX(s);
}
}
else if(s[i]=='/'||s[i]=='*')
{
if(p=="/"||p=="*")
{
stream<stream>>str;
s.replace(pop,i-pop,str);

return wordX(s);
}else
{
p=s[i];
str1=str2;
str2="";
}
}else
{
str2 +=s[i];
}

}
cout<<"wordX_错误!";
return s;
}

string comend(string s)//计算带括号的四则运算表达式
{
int start=-1;
for(int i=0;i!=s.length();++i)
{
if(s[i]=='(')
{
start=i;
}else if(s[i]==')')
{
string str =wordX(s.substr(start+1,i-start-1)+"#");
s.replace(start,i-start+1,str);
return comend(s);
}
}
if(start ==-1)
{
return wordX(s+"#");
}else
{
return "comend错误!";
}
}

string check(string s)//检查输入合法性
{
char a;
int n=0,rn=0;
if(s.find_first_not_of("()0123456789+-*/")>=0&&s.find_first_not_of("()0123456789+-*/")<=s.length())
{
return "输入字符串有误,不能输入除“()0123456789+-*/”以外的字符!";
}
for(int i =0;i!=s.length();++i)
{
if(s[i]=='+'||s[i]=='-'||s[i]=='/'||s[i]=='*')
{
if(a=='+'||a=='-'||a=='/'||a=='*')
{
return "输入字符串有误,不能有连续的两个运算符!";
}
}
if(s[i]=='(')
{
++n;
}
else if(s[i]==')')
{
++rn;
}
a=s[i];
}
if(n!=rn)
{
return "输入字符串有误,前后括号不匹配!";
}
return "OK";
}

void main()
{
string s;
cout<<"请输入你要计算的四则运算表达式! 输入exit退出!\n";
while (cin>>s)
{
if(s=="exit")
{
break;
}
if(check(s)=="OK")
{
cout<}else
{
cout<}
}


}




相关文档
最新文档