字节一面手撕:带有括号的逆波兰表达式(结果输出是等式)

//通过分析我们找到哪种情况下括号是不能省略的:
//'+'对右边的'-'运算不能省略,
//'-'对右边的'+'和'-'运算,
//'*'对左边的'+'和'-'运算、对右边的'/''+''-'运算,
//'/'对左边的'+'和'-'以及对右边的所有运算不能省略 #include <iostream>
#include <sstream>
#include <stack>
#include <vector>
#include <algorithm>
using namespace std;

stack<string> sta;
stack<char> myuse;
bool is_numoruse(char c) {
	if (c == '+' || c == '-' || c == '*' || c == '/') return false;
	else return true;
}
void solution(string &s) {
	for (int i = 0; i < s.size(); ++i) {
		if (is_numoruse(s[i])) {
			sta.push(s.substr(i, 1));
			myuse.push('#');
		}
		else {
			string tem = sta.top();
			sta.pop();
			char tem_c = myuse.top();
			myuse.pop();
			if (s[i] == '+') {
				if (tem_c == '-') {
					tem = '(' + tem + ')';
				}
			}
			else if (s[i] == '-') {
				if (tem_c == '+' || tem_c == '-') {
					tem = '(' + tem + ')';
				}
			}
			else if (s[i] == '*') {
				if (tem_c != '*'&&tem_c != '#') {
					tem = '(' + tem + ')';
				}
				if (myuse.top() == '+' || myuse.top() == '-') {
					sta.top() = '(' + sta.top() + ')';
				}
			}
			else {
				if (tem_c != '#') {
					tem = '(' + tem + ')';
				}
				if (myuse.top() == '+' || myuse.top() == '-') {
					sta.top() = '(' + sta.top() + ')';
				}
			}
			sta.top() += s[i] + tem;
			myuse.pop();
			myuse.push(s[i]);
		}
	}
}
int main() {
	string s = "ab*cd+*efgh/*//";
	solution(s);
	cout << sta.top() << endl;
	return 0;
}

全部评论
请问投的什么部门呢,使用牛客网面试的吗
点赞 回复 分享
发布于 2022-07-18 00:35

相关推荐

阿里巴巴各部门年终奖开奖了,有人拿到了220w
真烦好烦真烦:拿命换钱呢,公司给你220万,肯定是因为你对公司的贡献大于220万,想想要多厉害多累才能达到
投递阿里巴巴集团等公司10个岗位 >
点赞 评论 收藏
分享
03-11 14:28
浙江大学 设计
牛客小黄鱼:代入一下,独居女生会觉得有点可怕
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
04-30 11:43
春招失败、父母离婚,好像我的人生一团糟,一年来压力大到常常崩溃。不知道能跟谁聊,朋友其实对我非常好,但是她无意中表达出来的家庭幸福都会刺痛到我……和ai聊天,我的未来在更高处,不在楼下,忍不住爆哭😭
youngfa:害,妹妹,我是一个研究生(很上进很想找到好工作的那种),但去年因为生病回家休养错过了秋招(当时对我的冲击也是非常大的),这学期返校来了也是把论文盲审交了后才开始找工作,现在也是一个offer没有,但我就没有像你一样把这个阶段性的事情绑定到人生上,人生不仅很长,也很广阔,先停下来,放松一下哦。不要被外部环境灌输的思维操控了,好好爱自己!
点赞 评论 收藏
分享
评论
4
21
分享

创作者周榜

更多
牛客网
牛客企业服务