您好,欢迎访问三七文档
当前位置:首页 > 金融/证券 > 股票报告 > 一个带有{}[]()的计算器-我只用了一个方法搞定。-c++吧-贴吧
一个带有{}[]()的计算器,我只用了一个方法搞定。_c++吧_贴吧一个带有{}[]()的计算器,我只用了一个方法搞定。wangyp_wxh|消息(1)|我的i贴吧设置我的i贴吧全部动态i动态我的动态|我的俱乐部我的俱乐部|我的空间我的空间|退出贴吧7周年欢乐大抽奖,送ipad平板电脑!新闻网页贴吧知道MP3图片视频百科进入贴吧进入i贴吧贴子搜索吧内搜索|帮助百度贴吧c++吧浏览贴子吧主:zfkjay喜欢飞天的鱼杰物快速回复切换到经典版贴吧投诉兆星科技(原宜兴市和桥无损探伤器材厂)生产铅门铅门的老牌企业-宜兴市和桥无损探伤器材厂铅门系列,包括对开铅门和单扇铅门,也有电动铅门和手动铅门,宜兴市和桥无损探伤器..营养片是解决酒精肝,降血脂,降转氨酶的专利产品,是具有明确功效的唯一推荐产品,肝净ABC营养片解决了脂肪肝效..乐泰代理商销售乐泰胶黏剂乐泰代理商胶黏剂直销中心,质量好价格优,垂询热线:400-600-1758一级代理商-冠品.品质与服务保证!GRACO为流体输送控制设备领航者.GRACO品种齐全.GRACO根据您的需求而不同,信赖GRACO.冠品机具为GRA..软件编程国信蓝点软件编程,打破JAVA培训潜规则,学员未毕业80%遭疯抢河北泽豪,原河北金马河北泽豪,原河北金马化工,专业生产苯氧乙酸苯乙腈等医药化工产品;质量保证,检测手段完善,供货及时,售前,售后服务周到...代理商丰凯电子/上海领鑫全线代..nichicon代理商由丰鑫科技(上海领鑫/昆山丰凯)全线代理nichicon代理商洽询TEL:86-0512-57..型气体涡轮流量计,TLXZ型蒸汽流量计,LUX系列旋进旋涡气体流量计..时代伟名专营采购对讲机质优价廉!全国免邮费两年保修采购对讲机让您使用无忧!咨询热线010-51289510转贴次数:3共有13篇贴子一个带有{}[]()的计算器,我只用了一个方法搞定。jiimoo4位粉丝1楼#includeiostream.h#includestdlib.h#includestringusingnamespacestd;doublejisuan(charcstr[]){strings(cstr);doubledat[100];intfuhao[100]={0};intnum=0;charcs[50];inti,j;if(s[0]=='-')s.insert(0,1,'0');for(intn=0;ns.length();n++)if((s[n]=='{'||s[n]=='['||s[n]=='(')&&s[n+1]=='-')s.insert(n+1,1,'0');if(s[0]=='.')s.insert(0,1,'0');for(intn=0;ns.length();n++){if(!('0'=s[n-1]&&s[n-1]='9')&&s[n]=='.')s.insert(n,1,'0');if(s[n]=='.'&&!('0'=s[n+1]&&s[n+1]='9'))s.insert(n+1,1,'0');}i=1;for(intm=0,n=0;ns.length();n++){switch(s[n]){case'+':fuhao[i++]=m+1;break;case'-':fuhao[i++]=m+2;break;case'*':fuhao[i++]=m+3;break;case'/':fuhao[i++]=m+4;break;case'{':m+=4;break;case'}':m-=4;break;case'[':m+=80;break;case']':m-=80;break;case'(':m+=1600;break;case')':m-=1600;break;default:break;}num=i;}i=0;j=0;for(intn=0;n=s.length();n++){if('0'=s[n]&&s[n]='9'||s[n]=='.')cs[i++]=s[n];elseif('0'=s[n-1]&&s[n-1]='9'||s[n-1]=='.'){cs[i]='\0';dat[j++]=atof(cs);i=0;}else;}while(num1){j=-1;for(intn=0;nnum;n++)if(fuhao[n]j){j=fuhao[n];i=n;}switch(fuhao[i]%4){case1:dat[i-1]+=dat[i];break;case2:dat[i-1]-=dat[i];break;case3:dat[i-1]*=dat[i];break;case0:dat[i-1]/=dat[i];break;default:break;}for(intn=i;nnum;n++)fuhao[n]=fuhao[n+1];for(intn=i;nnum;n++)dat[n]=dat[n+1];num--;}returndat[0];}intmain(void){chara[]=-2.4*{-100/[10/[5-3]]}*(-0.3);coutjisuan(a)endl;;system(pause);return0;}2009-1-1900:11回复jiimoo4位粉丝2楼哈哈,运算结果为-14.4完全正确。2009-1-1900:13回复Cpt·Liberty1位粉丝3楼很棒..2009-1-1900:29回复Leeroy14位粉丝4楼好久没看到楼主的身影了-_____________________-2009-1-1909:05回复MasterRay5楼我也写一个#includecctype#includecstdio#includecstdlib#includestackusingnamespacestd;constinticp[]={0,4,4,6,6,8,3,8,2,8,1},isp[]={0,5,5,7,7,3,3,2,2,1,1};intConvert(charx){switch(x){case'\0':return0;case'+':return1;case'-':return2;case'*':return3;case'/':return4;case'(':return5;case')':return6;case'[':return7;case']':return8;case'{':return9;case'}':return10;default:return-1;}}boolCalc(chars[],double&res){stackintop;stackdoublenum;op.push(0);if(*s=='+')++s;elseif(*s=='-')++s,num.push(0),op.push(2);for(;;){if(isspace(*s)){++s;continue;}if(isdigit(*s)||*s=='.'){char*p=s,t;do++p;while(isdigit(*p)||*p=='.');t=*p;*p='\0';num.push(atof(s));*p=t;s=p;2009-1-1910:30回复MasterRay6楼算了,百度不让发了2009-1-1910:32回复210.22.152.*7楼请问lzs.insert(0,1,'0');是什么用法?2009-1-1916:02回复bluebaby98111位粉丝8楼//我这个只支持'('、')'的,出来现丑了。//那个版本忘了处理负号了,重新贴//计算器#includeiostream#includesstream#includealgorithm//STL通用算法#includestring//字符串类#includevector//STL动态数组容器//字符串转换为数值templatetypenameTTstring_value(conststd::string&str){Tvalue;std::stringstream(str.c_str())value;returnvalue;}doublecalculator(conststd::string&expression){std::strings=expression;doubleresult=0;std::stringstrNumber=;std::vectordoublenums;std::vectorcharops;for(longi=0;is.size();++i){switch(s[i]){case'(':{longcount=1;std::string::size_typep=i;for(;;){p=s.find_first_of((),p+1);if(std::string::npos==p)return0;//左右括号不匹配if('('==s[p])++count;if(')'==s[p])--count;if(0==count)break;}if(')'!=s[p])return0;nums.push_back(calculator(s.substr(i+1,p-i-1)));s.erase(s.begin()+i,s.begin()+p);break;}case'*':case'/':case'+':case'-':{if(strNumber.empty()&&'-'==s[i]){strNumber+=-;break;}else{if(!strNumber.empty())nums.push_back(string_valuedouble(strNumber));ops.push_back(s[i]);strNumber=;break;}}case'0':if(!strNumber.empty())strNumber+=0;break;case'1':strNumber+=1;break;case'2':strNumber+=2;break;case'3':strNumber+=3;break;case'4':strNumber+=4;break;case'5':strNumber+=5;break;case'6':strNumber+=6;break;case'7':strNumber+=7;break;case'8':strNumber+=8;break;case'9':strNumber+=9;break;case'.':strNumber+=.;break;default:break;}}if(!strNumber.empty())nums.push_back(string_valuedouble(strNumber));std::cout所有操作数:std::ends;std::copy(nums.begin(),nums.end(),std::ostream_iteratordouble,char(std::cout,));std::coutstd::endl;std::cout所有运算符:std:
本文标题:一个带有{}[]()的计算器-我只用了一个方法搞定。-c++吧-贴吧
链接地址:https://www.777doc.com/doc-1415254 .html