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


全部评论

相关推荐

Southyeung:我说一下我的看法(有冒犯实属抱歉):(1)简历不太美观,给我一种看都不想看的感觉,感觉字体还是排版问题;(2)numpy就一个基础包,机器学习算法是什么鬼?我感觉你把svm那些写上去都要好一点。(2)课程不要写,没人看,换成获奖经历;(3)项目太少了,至少2-3个,是在不行把网上学习的也写上去。
点赞 评论 收藏
分享
05-20 13:59
门头沟学院 Java
米黑子米黑子:你这个成绩不争取下保研?
点赞 评论 收藏
分享
06-11 15:52
东南大学 C++
问了一下hr,这个回答是G了吗
椛鸣:我遇到过 我给你翻一下 对不起 我之前把你当备胎了 现在我人已经招满了 ***吧
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

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