2012-03-26 260 views
0

此代碼是解決postfix.txt中的postfix問題的堆棧鏈表實現。如何將char數組轉換爲整數或雙精度?

我盯着我想轉換的線。 我只是想讓它成爲一個雙倍,然後我把它放在我的堆棧上,所以我不能在後面進行加法,減法,乘法和除法。我得到的錯誤是說「預期的表達」。 謝謝!

 void main() 
     { 
     ifstream postin("postfix.txt"); 
      char oper; 
      char a[100]; 
      int i=0; 
      while(oper != '$') 
      { 
       stack operands; 
       while(oper != '/n'&& oper != '$') 
       { 
        while(oper != ' '&&oper != '/n'&& oper != '$') 
        { 
         oper = postin.get(); 
         if(oper != '+' || oper != '*' || oper != '-' || oper != '/') 
         { 
          do 
          { 
          a[i]= oper; 
          i++; 
          }while(oper != ' '); 
************************************************double number = atoi(a[]); 
          operands.Push(number) 
         } 
         else 
         { 
          double b = operands.Pop(); 
          double a = operands.Pop(); 
          if(oper == '+') 
          { 
           operands.Push(a+b); 
          } 
          else if(oper == '-') 
          { 
           operands.Push(a-b); 
          } 
          else if(oper == '/') 
          { 
           operands.Push(a/b); 
          } 
          else 
          { 
           operands.Push(a*b); 
          } 
         } 
        } 

       } 

      } 



     postin.close(); 
     } 
+0

確定'/ N'做你想要的嗎? – 2012-03-26 05:18:36

回答

0

你不想「轉換」的字節數組,你想數的字符串表示解析成正確的數據類型。

首先,您需要知道您是否要處理整數或浮點值。然後你會想使用scanf()或atoi()/ atof()將值讀入int或double。但是這些函數都需要char *參數,所以你只需通過a而不是a[]

+0

你將什麼傳入scanf()?我從來沒有使用過這樣的代碼 – Jake 2012-03-26 05:18:45

+0

http://www.cplusplus.com/reference/clibrary/cstdio/scanf/ – 2012-03-26 05:20:31

+0

感謝您的幫助 – Jake 2012-03-26 05:25:51

0

這只是atoi(a),或者如果你想從一些偏移量開始,也許atoi(a + n)。儘管strtol()/strtod()可能是更有用的函數,因爲它們還會告訴您他們成功解析了多少個字符。並確保數組內有一個空終止符。

+0

你傳遞給scanf()是什麼?我從來沒有使用過這樣的代碼 – Jake 2012-03-26 05:19:14

+0

@Jake:我怎麼知道?我從未在我的生活中使用過'scanf'。 – 2012-03-26 05:20:15

0

使用ATOF()代替的atoi(),這將字符串轉換爲加倍

0

傑克,你忘了把一個索引表達式:

double number = atoi(a[i]);