zoukankan      html  css  js  c++  java
  • 计算后缀表达式

      1 #include<iostream>
      2 #include<string>
      3 #include<stack>
      4 using namespace std;
      5 
      6 void TransformExpr(char *oldexpr,char *newexpr)
      7 {
      8 stack<char> s;
      9 int i=0;
     10 int j=0;
     11 while(oldexpr[i] != '')
     12 {
     13 switch(oldexpr[i])
     14 {
     15 case '(' :
     16 s.push(oldexpr[i++]);
     17 break;
     18 case '+':
     19 case '-':
     20 while(s.size()>0 && s.top() != '(')
     21 {
     22 newexpr[j++] = s.top();
     23 s.pop();
     24 }
     25 s.push(oldexpr[i++]);
     26 break;
     27 case '*':
     28 case '/':
     29 while(s.size()>0 && s.top() != '(' && (s.top() == '*' || s.top() == '/'))
     30 { 
     31 newexpr[j++] = s.top();
     32 s.pop();
     33 }
     34 s.push(oldexpr[i++]);
     35 break;
     36 case ')':
     37 while(!s.empty())
     38 {
     39 char temp = s.top();
     40 s.pop();
     41 if(temp != '(')
     42 {
     43 newexpr[j++] = temp;
     44 }
     45 else
     46 {
     47 ++i;
     48 break;
     49 }
     50 )
     51 break;
     52 
     53 case ' ':
     54 ++i;
     55 break;
     56 default :
     57 while(oldexpr[i] >= '0' && oldexpr[i] <= '9')
     58 {
     59 newexpr[j++] = oldexpr[i];
     60 ++i;
     61 }
     62 newexpr[j++] = '#';
     63 break;
     64 }
     65 )
     66 while(!s.empty())
     67 {
     68 newexpr[j++] = s.top();
     69 s.pop();
     70 }
     71 newexpr[j] = '';
     72 )
     73 
     74 int Calculate(char *expr)
     75 {
     76 int i=0;
     77 stack<int> data;
     78 int tmp;
     79 while(expr[i] != '')
     80 {
     81 tmp = 0;
     82 if(expr[i] >= '0' && expr[i] <= '9')
     83 {
     84 while(expr[i] >= '0' && expr[i]<='9')
     85 {
     86 tmp = tmp * 10 + expr[i++] - '0';
     87 }
     88 data.push(tmp);
     89 }
     90 else if(expr[i] == '#')
     91 ++i;
     92 else 
     93 {
     94 int a,b;
     95 a= data.top();
     96 data.pop();
     97 b= data.top();
     98 data.pop();
     99 switch(expr[i++])
    100 {
    101 case '+':
    102 tmp = b+a;
    103 data.push(tmp);
    104 break;
    105 case '-':
    106 tmp = b-a;
    107 data.push(tmp);
    108 break;
    109 case '*':
    110 tmp = a*b;
    111 data.push(tmp);
    112 break;
    113 case '/':
    114 tmp = b/a;
    115 data.push(tmp);
    116 break;
    117 }
    118 }
    119 }
    120 return data.top();
    121 }
  • 相关阅读:
    远程访问Linux系统桌面
    NFS原理详解
    编译portmap和nfs-utils
    NFS资料
    PF_NETLINK应用实例NETLINK_KOBJECT_UEVENT具体实现--udev实现原理
    usb资料2
    USB相关资料
    书籍
    最详细的Log4j使用教程
    iOS开发UI篇—无限轮播(新闻数据展示)
  • 原文地址:https://www.cnblogs.com/susidian/p/10013232.html
Copyright © 2011-2022 走看看