欢迎来到天天文库
浏览记录
ID:12005568
大小:53.50 KB
页数:5页
时间:2018-07-15
《c++四则运算中的字符转换想法》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C++中要表达四则运算,最主要就是字符转换的问题,我提供的思路如下一个string变量中的字串是这种形式的,其中每一个都是字符变量String(34+6)*5=要怎么变成我们转化成能计算的式子呢?我是这样想的:先将string中的每个字符都配上标识,表明它是数值还是符号(1代表符号,0代表数值)(34+6)*5=100101101这样我就会知道每一位对应的是什么然后我们重新设置一个整形数组newstr来存放这个string关于这个转化,我的想法如下:如果本来是符号,则转化成数值存入newstr并标识上1表明他是运算符;如果有两个0的情况,说明
2、他们应该是一个数字,则把他们合并存入newstr并标识上0;然后就会得到如下的两个数组(34+6)*5=4034436414256110101101第二行是newstr中的值第三行是标识数组中的值然后呢之后转化后缀表达式就是数据结构的内容了看看书就可以啦这是目前我想出来的还算过的去的想法了,如果有大神,请别吐槽,一个晚上的结晶啊#include#includeusingnamespacestd;boolIsChar(charc){if('0'<=c&&c<='9')return0;elsereturn1;}
3、intmain(){strings;//存储用户输入的式子cout<<"请输出表达式(务必以等号结束)"<>s;intnewstr[100];//用来存储转化后的表达式intarr[100];//标志数组:用来标识newstr中每个元素对应的是数据还是运算符,若是数据,对应位置为0,反之为1inti=0;//对s中的内容进行索引while(s[i]!='='){arr[i]=IsChar(s[i]);i++;//如果是字符,arr[]对应位置标1;数据则标0}i=0;//对s中的内容进行索引int
4、n=0;//存储新的字符串的字符下标while(s[i]!='=')//此循环将s中字符串转化成数值形式存储在newstr中,并用arr数组标识每一位是数据还是字符{if(arr[i]==1)//如果是字符,转化成数值后直接放进newstr,并在arr的对应位置标识上1{newstr[n]=int(s[i]);arr[n]=1;n++;i++;}else//如果不是字符,转化成十进制数据后存入newstr,并在arr对应位置标识上0{if(i==0)//如果第一位就是数值,直接存入{newstr[n]=int(s[i])-48;arr[n]=
5、0;n++;i++;}elseif(arr[i-1]==0)//如果之前一个字符也是数字,将此数据与之前数据合并,例如字符串“90”转化成整型90后存入,并标识上0{newstr[n-1]=10*newstr[n-1]+int(s[i])-48;arr[n-1]=0;i++;}else{newstr[n]=int(s[i])-48;arr[n]=0;n++;i++;}}}newstr[n]=-1;arr[n]=1;//新字符串结束标记/*//此部分用来打印转化后的newstr及其标识数组arrinti=0;while(newstr[i]!=-
6、1){cout<7、》if(arr[i]==0){stack1[k]=newstr[i];arr[k]=0;k++;i++;}elseif(m==08、9、newstr[i]==40)//40代表左括号,可直接放入stack2;{stack2[m]=newstr[i];m++;i++;}else{switch(newstr[i]){case41:while(stack2[m-1]!=40){//')'stack1[k]=stack2[m-1];arr[k]=1;m--;k++;}m--;i++;break;case43:while(stack2[m-1]!=40&&10、m!=0){//'+'stack1[k]=stack2[m-1];arr[k]=1;m--;k++;}stack2[m]=newstr[i];m++;i++;bre
7、》if(arr[i]==0){stack1[k]=newstr[i];arr[k]=0;k++;i++;}elseif(m==0
8、
9、newstr[i]==40)//40代表左括号,可直接放入stack2;{stack2[m]=newstr[i];m++;i++;}else{switch(newstr[i]){case41:while(stack2[m-1]!=40){//')'stack1[k]=stack2[m-1];arr[k]=1;m--;k++;}m--;i++;break;case43:while(stack2[m-1]!=40&&
10、m!=0){//'+'stack1[k]=stack2[m-1];arr[k]=1;m--;k++;}stack2[m]=newstr[i];m++;i++;bre
此文档下载收益归作者所有