关注
最后一题过了83%,实在不知道还有什么坑的。。反正直接导致了前两题没时间做了 = = #include <iostream>
#include <vector>
#include <map>
#include <cstring>
#include <string>
#include <algorithm>
using namespace std;
string ss;
string opst[1005];
int oppos;
string allst[1005];
int allpos;
int start, len;
string numst[1005];
int numpos;
map<char, int> opma;
bool ischar(char c) {
if (c >= 'a' && c <= 'z') return true;
if (c >= 'A' && c <= 'Z') return true;
if (c >= '0' && c <= '9') return true;
return false;
}
bool isnum(string s) {
if (s.length() > 1) return true;
if (ischar(s[0])) return true;
return false;
}
string fan(string s) {
for (int i = 0; i < s.length(); ++i) {
if (s[i] >= 'a' && s[i] <= 'z') {
s[i] -= 'a' - 'A';
continue;
}
if (s[i] >= 'A' && s[i] <= 'Z') {
s[i] -= 'A' - 'a';
continue;
}
}
return s;
}
string fu(string s) {
string t(s.rbegin(), s.rend());
return t;
}
string chen(string s1, string s2) {
string rst = "";
rst += s1[0];
for (int i = 1; i < s1.length(); ++i) {
rst += s2;
rst += s1[i];
}
return rst;
}
string chu(string a, string b) {
int flag = 1, m;
while(flag) {
m = a.find(b);
if (m < 0) {
flag = false;
} else {
a.erase(m, b.length());
}
}
return a;
}
string jia(string a, string b) {
return a + b;
}
string jian(string a, string b) {
int flag = 1, m;
m = a.find(b);
if (m < 0) {
flag = false;
} else {
a.erase(m, b.length());
}
return a;
}
void solve() {
oppos = 0;
allpos = 0;
start = 0;
len = 0;
ss = chu(ss, "()");
if (ss[0] == '-') {
ss[0] = '=';
}
for (int i = 1; i < ss.length(); ++i) {
if (ss[i] == '-') {
if ((!ischar(ss[i-1])) && (ss[i-1]!=')')) {
ss[i] = '=';
}
}
}
for (int i = 0; i < ss.length(); ++i) {
if (ischar(ss[i])) {
len ++;
continue;
} else {
if (len != 0) {
allst[allpos ++] = ss.substr(start, len);
len = 0;
}
start = i + 1;
if (ss[i] == '~' || ss[i] == '=') {
opst[oppos ++] = ss.substr(i, 1);
continue;
}
if (ss[i] == '(') {
opst[oppos ++] = "(";
continue;
}
if (ss[i] == ')') {
while(opst[oppos - 1][0] != '(') {
allst[allpos ++] = opst[oppos - 1];
oppos --;
}
oppos --;
continue;
}
while(oppos > 0 && opma[ss[i]] < opma[opst[oppos - 1][0]]) {
allst[allpos ++] = opst[oppos - 1];
oppos --;
}
opst[oppos ++] = ss.substr(i, 1);
}
}
if (len != 0) {
allst[allpos ++] = ss.substr(start, len);
}
while(oppos > 0) {
allst[allpos ++] = opst[oppos - 1];
oppos --;
}
numpos = 0;
for (int i = 0; i < allpos; ++i) {
if (isnum(allst[i])) {
numst[numpos ++] = allst[i];
continue;
}
if (allst[i][0] == '~') {
numst[numpos - 1] = fan(numst[numpos - 1]);
continue;
}
if (allst[i][0] == '=') {
numst[numpos - 1] = fu(numst[numpos - 1]);
continue;
}
if (allst[i][0] == '*') {
numst[numpos - 2] = chen(numst[numpos - 2], numst[numpos - 1]);
numpos --;
continue;
}
if (allst[i][0] == '/') {
numst[numpos - 2] = chu(numst[numpos - 2], numst[numpos - 1]);
numpos --;
continue;
}
if (allst[i][0] == '+') {
numst[numpos - 2] = jia(numst[numpos - 2], numst[numpos - 1]);
numpos --;
continue;
}
if (allst[i][0] == '-') {
numst[numpos - 2] = jian(numst[numpos - 2], numst[numpos - 1]);
numpos --;
continue;
}
}
cout << numst[0] << endl;
}
int main() {
ios::sync_with_stdio(false);
//freopen("input.txt", "r", stdin);
opma['+'] = 1;
opma['-'] = 1;
opma['*'] = 2;
opma['/'] = 2;
opma['~'] = 3;
opma['='] = 3;
opma['('] = 0;
opma[')'] = 0;
cin >> ss;
solve();
return 0;
}
查看原帖
点赞 4
相关推荐
07-27 23:23
门头沟学院 数据仓库 点赞 评论 收藏
分享
07-01 22:55
兰州城市学院 Java 点赞 评论 收藏
分享
07-25 18:06
门头沟学院 Java 点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 26届的你,投了哪些公司? #
6597次浏览 104人参与
# 我对___祛魅了 #
14750次浏览 143人参与
# 中兴秋招 #
185995次浏览 2062人参与
# 如何快速融入团队? #
5520次浏览 79人参与
# 你跟室友的关系怎么样? #
1110次浏览 31人参与
# 和同事相处最忌讳的是__ #
7645次浏览 89人参与
# 简历上的经历如何包装 #
5787次浏览 162人参与
# 你遇到最难的面试题目是_ #
2095次浏览 49人参与
# 元戎启行求职进展汇总 #
35221次浏览 266人参与
# 打工人的精神状态 #
65269次浏览 1084人参与
# 我和mentor的爱恨情仇 #
60971次浏览 371人参与
# 工作中哪个瞬间让你想离职 #
37955次浏览 298人参与
# 什么样的背景能拿SSP? #
9033次浏览 81人参与
# 25届如何提前做秋招准备? #
175942次浏览 2493人参与
# 你最讨厌面试问你什么? #
4753次浏览 95人参与
# 毕业季,给职场新人一些建议 #
97959次浏览 1773人参与
# 工作中的卑微时刻 #
20256次浏览 165人参与
# 职场人,说说你的烦心事 #
13123次浏览 110人参与
# 远景求职进展汇总 #
53929次浏览 299人参与
# 职场常用语录大全 #
5645次浏览 42人参与
# 一人推荐一个机械人值得去的公司 #
413867次浏览 4157人参与