首页 > 其他分享 >11.19随笔

11.19随笔

时间:2024-11-19 22:19:13浏览次数:1  
标签:std ch operands 11.19 postfix operators 随笔 表达式

这里是11.19随笔。
题目留档:使用键盘输入数学表达式(含数字,四种运算符+、-、、/和小括号,其中运算数都是一位数(0~9)),将数学表达式转化成后缀表达式输出,利用后缀表达式求表达式的值并输出。

输入格式:
输入正确的表达式(可以有空格)后回车,得到后缀表达式和结果。输入括号缺失的表达式,输出"ERROR:缺少括号"。输入两个除括号外运算符连续的表达式,输出"ERROR:表达式缺操作数"。

输出格式:
请在这里描述输出格式。例如:对每一组输入,在一行中输出A+B的值。
代码:

include

include

include

include

include

// 比较运算符优先级
int precedence(char op) {
if (op == '(') return 0;
if (op == '+' || op == '-') return 1;
if (op == '*' || op == '/') return 2;
return -1;
}

// 中缀表达式转后缀表达式
std::string infixToPostfix(const std::string& infix) {
std::stack operators;
std::string postfix;
std::istringstream iss(infix);
char ch;
char prev = ' ';
while (iss >> ch) {
if (std::isdigit(ch)) {
postfix += ch;
prev = ch;
} else if (ch == '(') {
operators.push(ch);
prev = ch;
} else if (ch == ')') {
while (!operators.empty() && operators.top()!= '(') {
postfix += operators.top();
operators.pop();
}
if (operators.empty()) {
return "ERROR:缺少括号";
}
operators.pop();
prev = ch;
} else {
if ((prev == '+' || prev == '-' || prev == '' || prev == '/') && (ch == '+' || ch == '-' || ch == '' || ch == '/')) {
return "ERROR:表达式缺操作数";
}
while (!operators.empty() && precedence(operators.top()) >= precedence(ch)) {
postfix += operators.top();
operators.pop();
}
operators.push(ch);
prev = ch;
}
}
while (!operators.empty()) {
postfix += operators.top();
operators.pop();
}
return postfix;
}

// 计算后缀表达式的值
int evaluatePostfix(const std::string& postfix) {
std::stack operands;
for (char ch : postfix) {
if (std::isdigit(ch)) {
operands.push(ch - '0');
} else {
int operand2 = operands.top();
operands.pop();
int operand1 = operands.top();
operands.pop();
switch (ch) {
case '+':
operands.push(operand1 + operand2);
break;
case '-':
operands.push(operand1 - operand2);
break;
case '*':
operands.push(operand1 * operand2);
break;
case '/':
operands.push(operand1 / operand2);
break;
}
}
}
return operands.top();
}

int main() {
std::string infix;
std::getline(std::cin, infix);
std::string postfix = infixToPostfix(infix);
std::cout << postfix << std::endl;
if (postfix.find("ERROR") == std::string::npos) {
std::cout << evaluatePostfix(postfix) << std::endl;
} else {
std::cout << postfix << std::endl;
}
return 0;
}

标签:std,ch,operands,11.19,postfix,operators,随笔,表达式
From: https://www.cnblogs.com/Thanatos-syst/p/18555732

相关文章

  • 11.19
    refuse用法搭配基本含义和用法‌:refuse的基本意思是“拒绝”,表示由于不情愿或不愿意而对某项要求或事物给予否定的回答或不接受某物或不肯做某事。refuse既可用作及物动词,也可用作不及物动词。用作及物动词时,可接名词、代词或动词不定式作宾语,有时也可接双宾语,其间接宾语可以转化......
  • 每日打卡 11.19 (2)
    includeinclude<string.h>include<windows.h>usingnamespacestd;structstudent{charname[10];intc,math,english;doubleaverage;};intmain(){intindex,n;structstudents[10],temp;cout<<"请输入学生人数:";cin>>......
  • 每日打卡 11.19
    includeinclude<string.h>include<windows.h>usingnamespacestd;structstudent{charname[10];intc,math,english;doubleaverage;};intmain(){intindex,n;structstudents[10],temp;cout<<"请输入学生人数:";cin>>n......
  • 2024.11.19 test
    A给定一个无限长序列的\(0\simn-1\)项,每项满足与\(n\)的差不超过\(1\)。之后的每一项满足\(a_i=\sum_{j=0}^{i-1}[a_j+j\gei]\)。\(q\)次询问第\(p\)个位置的值。\(p\le10^{15}\)。非常难的签到,考虑消去常数,将\(a_i\)全部减去\(n\),那么\(a_i=[a_{i-n-1}=1]-[a_......
  • [考试记录] 2024.11.19 noip模拟赛17
    T1选取字符串warning❗:本题解前缀含量过高。挺典的kmp。考虑到题目中的串都是一个串的前缀,那么所选出来的串,他们的前缀一定是最短的那个串。不妨直接枚举每一个前缀,也就是枚举每一个串,看他们是否可以作为前缀出现,hash即可,复杂度\(\mathcal{O}(N^2)\)。换个思路,考虑有多......
  • 24.11.19
    今日写大作业实验三:JFinal极速开发框架实验 (2024.11.29日前完成)    根据参考资料,学习JFinal极速开发框架的使用并如下任务:    任务一:了解Maven及其使用方法,总结其功能作用(占20%)    任务二:学习JFinal框架,基于Maven建立JFinal工程,并对JFinal框架功能进行总结介绍(占3......
  • 11.19 CW 模拟赛 T1.谁开了小号
    算法嗯,和赛时做法也是没有一点相似之处,寄!挂个\(\rm{TJ}\)题解下载对于暴力,显然可以用\(\rm{dfs}\)实现,这种\(\rm{dfs}\)我还没有见过大概有个想法,每次有两种选择,要么新开集合,要么从前面加一个进去,大概就这样,也比较简单,剪剪枝小数据包过的正解做......
  • 2024.11.19 模拟赛
    11.19模拟赛题目质量点赞!好题!storm普及组模拟题god有趣的dp题key:考察相对位置设计状态\(f(i,j)\)表示考虑后\(i\)个操作,经过了相对坐标为\(j\)的点的概率。转移中,如果这一步不动,相对坐标不变;否则,相对坐标整体平移。答案就是\(f(n,j)\)。fate瞎搞贪心题显然从......
  • 11.19 CW 模拟赛 赛时记录
    看题\(\rm{T1}\)神tmzcy和jmr,what'sup至少看懂题了(雾)\(\rm{T2}\)也是看懂题了,怎么也应该比\(\rm{T1}\)难\(\rm{T3}\)这个类型的题\(100\%\)不会的呀看看能不能骗点算了\(\rm{T4}\)神秘计数,这个类型的题\(100\%\)不会的呀看看能不能骗点算了正序......
  • 11.19实验19:中介者模式
    [实验任务一]:虚拟聊天室在“虚拟聊天室”实例中增加一个新的具体聊天室类和一个新的具体会员类,要求如下:1.新的具体聊天室中发送的图片大小不得超过20M。2.新的具体聊天室中发送的文字长度不得超过100个字符。3.新的具体会员类可以发送图片信息和文本信息。4.新的具体会员......