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

最新文章

  1. Apache 配置虚拟主机三种方式
  2. 解决ASP.Net第一次访问慢的处理(IIS8)
  3. Tools - Markdown
  4. 剑指Offer 左旋转字符串
  5. SpringRMI解析2-RmiServiceExporter逻辑脉络
  6. zabbix一件漂亮的外衣配置
  7. 如何删除 Ubuntu 上不再使用的旧内核
  8. PowerDesigner实用技巧小结(2)
  9. COJ 1011 WZJ的数据结构(十一)树上k大
  10. Dubbo Zookeeper
  11. OC基础了解篇
  12. 套接字API
  13. python 上台阶
  14. gcc 8.2.1 / MCF thread 简介
  15. 我的 FPGA 学习历程(02)—— 实验:点亮 LED 灯
  16. python自动化,使用unittest对界面操作,读取excel表格数据输入到页面查询结果,在把结果保存到另外一张excel中
  17. Ex 2_34 线性3SAT..._第四次作业
  18. 20155219付颖卓《网络对抗》逆向及Bof基础
  19. DBUS 的学习 概念清晰
  20. GCD之Source

热门文章

  1. C++11 并发指南二(std::thread 详解)(转)
  2. Git经常使用命令
  3. mysql用户修改登录密码及授予用户远程登录权限
  4. x264 编码数配置
  5. Allegro16.6和17.0和17.2中将板框导出DXF文件
  6. viewpager 跳转到指定页面
  7. wordpress系列1:安装
  8. ORACLE SQL性能优化(全)
  9. ZeroClipboard—ZeroClipboard的使用
  10. SAM4E单片机之旅——2、LED闪烁之轮询定时器