演算法表示式變成

dongyu2013發表於2014-03-21
給定一個如下格式的字串(1,(2,3),(4,(5,6),7))括號內的元素可以是數字,也可以是另一個括號,請實現一個演算法消除巢狀的括號,比如把上面的表示式變成:(1,2,3,4,5,6,7),如果表示式有誤請報錯。

百度筆試題 網上答案很少 自己寫了一個 供大家參考 不對的地方 請賜教

點選(此處)摺疊或開啟

  1. stack<char> opr; //括號棧\"(\"
  2. stack<char> ch; //數字棧1-9
  3. stack<char> result; //結果棧

  4. void format_turn(const char *str)
  5. {
  6.    if(str==NULL||*str==\'\\0\')
  7.    {
  8.       return;
  9.    }
  10.    while(*str!=\'\\0\')
  11.    {
  12.       if(*str>=\'0\'&&*str<=\'9\')
  13.      {
  14.      ch.push(*str); //數字入棧
  15.      }
  16.      else if(*str==\'(\')
  17.      {
  18.      opr.push(*str); //左符號入棧
  19.      }
  20.      else if(*str==\')\') //右符號匹配
  21.      {
  22.          if(!opr.empty()) //不為空,消去左符號
  23.          {
  24.              opr.pop();
  25.          }
  26.          else //為空,失敗
  27.          {
  28.              cout<<\"error\"<<endl;
  29.              return;
  30.          }
  31.      }
  32.      ++str;
  33.    }
  34.    if(!opr.empty()) //括號棧還有\"(\",失敗
  35.    {
  36.       cout<<\"error\"<<endl;
  37.       return;
  38.    }
  39.    else
  40.    {
  41.       while(!ch.empty()) //成功,入結果棧
  42.      {
  43.          char temp=ch.top();
  44.          result.push(temp);
  45.          ch.pop();
  46.      }
  47.    }
  48.    cout<<\"(\"; //正確,輸出結果
  49.    while(!result.empty())
  50.    {
  51.      char temp = result.top();
  52.      cout<<temp;
  53.      result.pop();
  54.      if(result.size()!=0)
  55.      {
  56.      cout<<\",\";
  57.      }
  58.      else
  59.      {
  60.     
  61.      }
  62.    }
  63.    cout<<\")\"<<endl;
  64. }

  65. int main(void)
  66. {
  67.     char *str=\"(1,(2,3),(4,(5,6),7))\";
  68.     format_turn(str);
  69.     return 0;
  70. }

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29012686/viewspace-1127030/,如需轉載,請註明出處,否則將追究法律責任。

相關文章