c++四则运算含括号(堆栈).docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
#includeiostream #includestack #includestring using std::cin; using std::string; using std::stack; using std::cout; using std::endl; int Level(char m){//算符号优先级 switch (m){ case +: case -: return 1; case *: case /: return 2; case (: case ): return 0; case #: return -1; default:break; } } void main(){ stackchary;//运算符堆栈 stackintx;//int 堆栈 string s= ;//接受算式表达式 string ss;//复制s string l= ;//用于存像123的字符窜 cins; ss=s; s+=#$;//#将y中的运算符都拿出来,$用于表示算式结尾 int i=0;//s的下标偏移量 double c=0;//存中间运算结果 bool m=1;//判断表达式是否正确,这里只做了简单判断 while(s[i]!=$)//对表达式逐个字符扫过去 { //往栈x中放int数********************************************************************* if(s[i]47s[i]58){//字符0-9的ASCII范围为47-58 l+=s[i]; for(int j=i+1;s[j]47s[j]58;j++) l+=s[j]; x.push(atoi(l.c_str()));//将类似“123”字符串换成int型压入栈中; l= ; i=j; } //对符号进行操作******************************************************************* if(s[i]=35s[i]=47){ //35-47是一段符号的ASCII区间,主要用于捕获符号,这里没细考虑,其中还包括^等 if(y.size()==0||s[i]==(||Level(s[i])Level(y.top())) y.push(s[i]); else{ if(s[i]==)){//遇到)的情况,直接将y中的符号一个一个拿出来运算,直到遇到(为止 for(;y.top()!=(;y.pop()){ char d=y.top(); //取栈顶的一个元素 double a=x.top(); //将栈顶元素删除掉 x.pop(); double b=x.top(); x.pop(); switch(d){ case +:{ c=a+b;break;} case -:{ c=b-a;break;} case *:{ c=a*b;break;} case /:{ c=b/a;break;} default:break; } x.push(c); //中间结果放入x中 } y.pop(); //将‘(弹出栈x } else{ //遇到+,-,*,/的处理 for(;y.size()!=0Level(s[i])=Level(y.top());y.pop()){{ //将y里不小于当前符号优先级的符号拿出来,运算 char d=y.top(); int a=x.top(); x.pop(); int b=x.top(); x.pop(); switch(d){ case +:{ c=a+b;break;} case -:{ c=b-a;break;} case *:{ c=a*b;break;} case /:{ c=b/a;break;} default:b

您可能关注的文档

文档评论(0)

zhuliyan1314 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档