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


全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务