中缀表达式std
#include<cstdio>
#include<cstdlib>
#include<string>
#include<cstring>
using namespace std;
int number[101],i = 0, p = 1;
char symbol[101],s[256], t[256];
void push() //算符入栈运算
{
symbol[++p] = s[i];
}
void pop() //运算符栈顶元素出栈,并取出操作数栈元素完成相应的运算
{
switch(symbol[p--])
{
case '+':number[p] += number[p + 1];break;
case '-':number[p] -= number[p + 1];break;
case '*':number[p] *= number[p + 1];break;
case '/':number[p] /= number[p + 1];break;
}
}
bool can() //判断运算符的优先级别,建立标志函数
{
if ((s[i] == '+' || s[i] == '-') && symbol[p] != '(') return 1;
if ((s[i] == '*' || s[i] == '/') && (symbol[p] == '*' || symbol[p] == '/'))return 1;
return 0;
}
int main()
{
printf("String :");
gets(s);
s[strlen(s)] = ')';
symbol[p] = '(';
while (i < strlen(s))
{
while (s[i] == '(') //左括号处理
{
push();i++;
}
int x = 0;
while (s[i] >= '0' && s[i] <= '9') //取数入操作数栈
x = x * 10 + s[i++] - '0';
number[p] = x;
do
{
if (s[i] == ')') //右括号处理
{
while (symbol[p] != '(') pop();
number[--p] = number[p + 1];
}
else
{ //根据标志函数值作运算符入栈或出栈运算处理
while (can()) pop();
push();
}
i++;
}while (i < strlen(s) && s[i - 1] == ')');
}
printf("%d\n",strlen(s));
printf("Result=%d", number[0]);
return 0;
}
最新文章
- Apache 配置虚拟主机三种方式
- 解决ASP.Net第一次访问慢的处理(IIS8)
- Tools - Markdown
- 剑指Offer 左旋转字符串
- SpringRMI解析2-RmiServiceExporter逻辑脉络
- zabbix一件漂亮的外衣配置
- 如何删除 Ubuntu 上不再使用的旧内核
- PowerDesigner实用技巧小结(2)
- COJ 1011 WZJ的数据结构(十一)树上k大
- Dubbo Zookeeper
- OC基础了解篇
- 套接字API
- python 上台阶
- gcc 8.2.1 / MCF thread 简介
- 我的 FPGA 学习历程(02)—— 实验:点亮 LED 灯
- python自动化,使用unittest对界面操作,读取excel表格数据输入到页面查询结果,在把结果保存到另外一张excel中
- Ex 2_34 线性3SAT..._第四次作业
- 20155219付颖卓《网络对抗》逆向及Bof基础
- DBUS 的学习 概念清晰
- GCD之Source