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;
} 