2012-03-26 258 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]);