• 一个通俗易懂的表达式。


    今天上午下了下昨天的代码。。。。改了一小部分。。。

    能够实现对表达式的求值了。。。

    但是没对它的容错进行处理了。。。。总的来说功能是实现了。。

    但是自己觉得不满意。。。。不满意自己写的代码。。。为什么别人能写出高效的代码。。。

    而我却。。。。。总结了一下原因。。。基础没有打牢固。。。有些东西用不习惯。。。例如泛型算法中的List。。.

    Vector也不是经常用。。。。

    所以本人要闭关去了。。。。。赶快打好基础。。。。早日出关。。。。

    //转换成后缀表达式用数组保存字符
    int MidToBack(char *tPtr)
    {
     Stack<char> s;
     char *tChar = tPtr;
     int tRet;
     int i=0;
     char tSave[MAXSIZE];
     bool uNumber = false;

     //检测首字符是否为负数
     if(*tChar == '-')
     {
      tSave[i] = *tChar;
      ++i;
      ++tChar;
      goto Number;
     }

     while(*tChar)
     {
      if(*tChar == ' ')
      {
       ++tChar;
       continue;
      }
      else if(::isdigit(*tChar))
      {
    Number:
       while((*tChar >= '0') && (*tChar <= '9'))
       {
        tSave[i] = *tChar;
        ++i;
        ++tChar;
       }
       if(*tChar == '.')
       {
        tSave[i] = *tChar;
        ++i;
        ++tChar;
        while((*tChar >= '0') && (*tChar <= '9'))
        {
         tSave[i] = *tChar;
         ++i;
         ++tChar;
        }
       // --tChar;
       }
       --tChar;
       tSave[i] = ' ';
       ++i;

      }
      else if((*tChar == '+') || (*tChar == '-') || (*tChar == '*')||
           (*tChar == '/') || (*tChar == '(') || (*tChar == ')')||
        (*tChar == '[') || (*tChar == ']') || (*tChar == '{')||
        (*tChar == '}'))
      {
       if(s.IsEmpty() || *tChar == '{' || *tChar == '[' || *tChar == '(')
       {
        s.Push(*tChar);
        if(*(tChar+1) == '-')
        {
         ++tChar;
         tSave[i] = *tChar;

         ++i;
         ++tChar;
         goto Number;
        }
       }
       else
       {
        //对特殊字符的处理例如'}'']'')'
        if((*tChar == '}') || (*tChar == ']') || (*tChar == ')'))
        {
         char tTemp;
         switch(*tChar)
         {
         case ')':tTemp='(';
          break;
         case ']':tTemp='[';
          break;
         case '}':tTemp='{';
          break;
         default:
          break;
         }
         while(tTemp != s.Top())
         {
          tSave[i] = s.Top();
          ++i;
          tSave[i] = ' ';
          ++i;
          s.Pop();
         }
         s.Pop();
        }
        else     //对特殊字符的处理例如'+''-''*''/'
        { 
         tRet = Judge(s.Top(),*tChar);
         if(tRet == 1)
         {
          s.Push(*tChar);
         }
         else
         {
          tSave[i] = s.Top();
          ++i;
          tSave[i] = ' ';
          ++i;
          s.Pop();
          s.Push(*tChar);
         }
        }
       }
      }
      else
      {
       cout<<"输入出错\n";
       return -1;
      }
      tChar++;
     }


     while(!s.IsEmpty())
     {
      tSave[i] = s.Top();
      ++i;
      tSave[i] = ' ';
      ++i;
      s.Pop();
     }
     strncpy(tPtr, tSave, i);
     tPtr[i] = '#';
     return 1;
    }

  • 相关阅读:
    SVN使用教程总结
    SVN
    js中设置元素class的三种方法小结
    Javascript 删除tr 元素
    SQL Server执行计划的理解
    java多线程知识点汇总(四)多线程知识点脉络图
    hibernate将connection放进threadlocal里实现数据库连接池
    数据库连接池中是将connection放进threadlocal里的
    java jdbc深入理解(connection与threadlocal与数据库连接池和事务实)
    java项目怎样添加jar包依赖?
  • 原文地址:https://www.cnblogs.com/ccmfc/p/1724393.html
Copyright © 2020-2023  润新知