zoukankan      html  css  js  c++  java
  • 递归-中项表达式求解

    题外话:

    某天晚上梦见更了五六篇博客而不知疲惫.

    如果这是现实该多好啊哈哈哈!美梦成真吧!

    中项表达式就是最普通的表达式.也是几个小定义来回递归.这个题在去年期末上机题中出现过,但是比这个还有难一些.

    呜呜呜,去年的我啥都不会(当然现在也是),为难我干什么呀!!!!

    解:

     1 #include <iostream>
     2 using namespace std;
     3 /*
     4  * 感觉脑子有坑x10086
     5  * 
     6  * 
     7  * 
     8  * 首先前两个是需要循环的,因为有连加的情况,
     9  * 而最后一种不用,括号里面直接就是一个新的表达式
    10  * 
    11  * 其次注意返回值,,,
    12  * 
    13  * 因为可能没有+-*/所以result 上来就是??_value的值,就不要先搞个sum=0 return sum这个玩意了
    14  */
    15 int term_value();
    16 int factor_value();
    17 int expreesion_value(){
    18 
    19     int result = term_value();
    20     while(1){
    21         char op=cin.peek();//查看第一个字符但是不取走
    22         if(op=='+'||op=='-'){
    23             if(op=='+') {
    24                 cin.get();//取走一个字符
    25                 int value = term_value();
    26                 result = result + value;
    27             }
    28             else{
    29                 cin.get();//取走一个字符
    30                 int value = term_value();
    31                 result = result - value;
    32             }
    33 
    34         }
    35         else{
    36             break;
    37         }
    38     }
    39     return result;
    40 }
    41 int term_value(){
    42 
    43     int result = factor_value();
    44     while(1){
    45         char op=cin.peek();
    46         if(op=='*'||op=='/'){
    47             if(op=='*') {
    48                 cin.get();
    49                 int value = factor_value();
    50                 result = result *value;
    51             }
    52             else{
    53                 cin.get();
    54                 int value = factor_value();
    55                 result = result / value;
    56 
    57             }
    58         }
    59         else{
    60             break;
    61         }
    62     }
    63     return result;
    64 
    65 }
    66 int factor_value(){
    67     int result=0;
    68 
    69 
    70         char op = cin.peek();
    71         if (op == '(') {
    72             cin.get();
    73             result = expreesion_value();
    74             cin.get();
    75         } else {
    76             while (isdigit(op)) {
    77                 result = result * 10 + op - '0';//计算整数
    78                 cin.get();
    79                 op = cin.peek();
    80             }
    81         }
    82 
    83         return result;
    84     }
    85 
    86 
    87 
    88 
    89 
    90 
    91 int main(){
    92     cout<<expreesion_value();
    93 
    94 }
  • 相关阅读:
    python内建eval, exec 和exec函数的用法
    wxPython控件学习之wx.grid.Grid (包括对GridCellEditor和GridCelRender的扩展,以支持更多的grid cell 样式, 以GridCellColorEditor为例)
    wxPython控件学习之wx.ComboBox
    tar 解压缩命令
    ios是否安装了某应用
    iPhone IOS中DEB如何安装
    一种简便获取iPhone IMEI 的方法
    iOSOpenDevtroubleshoot
    Mac&iOS Socket编程
    Debian Binary Package Building HOWTO
  • 原文地址:https://www.cnblogs.com/zhmlzhml/p/13246865.html
Copyright © 2011-2022 走看看