p1022计算器的改良,字符串+输入输出
一般化简为,例如: x=10
方程左边x是正的,常数要调到右边所以是负的
要有个变量lr记录现在是方程的左边还是右边
然后系数的正负变量flag,这里要注意方程左边转右边时flag要初始化1或者每次读完一个数后都要flag初始化
for (i:0~size){ 当前字符是+ flag=1//str[i] 当前字符是- flag=-1 当前字符是= lr=-1,flag=1 当前字符是数字{ num=num*10+数字 if (最后一位 || 下一位字符是加减等){ 数字总和+=当前数字*lr*flag flag初始化1 当前数字初始化0 } } 当前字符是字母{ 字母总和+=当前数字*lr*flag flag初始化1 当前数字初始化0 } } 数字总和*=-1;//最后常数调到右边
代码
#include <iostream> using namespace std; int lr=1;//左正右负 string str; char alph; int flag,num,sum; int alphnum; int main(int argc, char** argv) { cin>>str; flag=1; for(int i=0;i<str.size();i++){ if(str[i]=='+') flag=1; else if(str[i]=='-') flag=-1; else if(str[i]=='=') lr=-1,flag=1;//flag=1换边后之前的flag可能是- else if(str[i]>='0'&&str[i]<='9'){ num=num*10+(str[i]-'0'); if(i==str.size()-1||str[i+1]=='+'||str[i+1]=='='||str[i+1]=='-'){ sum+=num*flag*lr; num=0; } }else { alph=str[i]; if(num==0) num=1; alphnum+=num*lr*flag; num=0; } } sum*=-1; if(sum==0) printf("%c=0.000",alph); else printf("%c=%.3f",alph,(double)sum/(double)alphnum); return 0; }