2016-04-26 84 views
-3

我尝试创建一个可以评估简单数学表达式(如“4 + 4”)的程序。表达式由用户给出。如何将单个字符转换为双精度

该程序将其保存在char*中,然后搜索二元运算(+, - ,*,:)并执行操作。

问题是,我不知道如何将单个char转换为double值。

我知道有atof函数,但我想转换单个char

有没有办法做到这一点,而不创建一个char*

+0

如果它是一个字符,为什么不明确检查数字?或者将它用作int(ASCII表),'0'到'9'表示为48到57 ... – sperber

+2

'程序将它保存在char *中 - 这不会发生。您将字符保存到缓冲区中,而不是指向指针。 – PaulMcKenzie

+0

你的问题不是很清楚。你的意思是''0'=> 0' ...''9'=> 9'并且所有其他非数字字符都是错误的吗? –

回答

0

A char通常代表一个字符。然而,单个char只是至少[-127,+ 127](签名版本)或至少[0,255](未签名版本)范围内的整数。

如果您获得了一个看起来像一个数字的字符,存储在其中的值是表示它的ASCII码。数字从代码48开始(零),然后递增,直到代码57(9)。因此,如果你拿这个代码并减去48,你就得到了整数值。从那里,把它转换为双是一个铸造的问题。

这样:

char digit = ... 
double value = double(digit - 48); 

,甚至更好,为了方便:

char digit = ... 
double value = double(digit - '0'); //'0' has a built-in value 48 
+1

'数字 - '0'''是便携式;它不假定ASCII,并且可以用于任何**字符编码。 –

0

有一种方法可以做到这一点,而无需创建一个char * ???

当然。可以从一个单一的char提取位数如下:

char c = '4'; 
double d = c - '0'; 
     // ^^^^^^^ this expression results in a numeric value that can be converted 
     //   to double 

这使用了起始于'0'ASCIIEBCDIC编码在一组连续的值的位数一定字符表的情况。

+0

假设char是从'0'到'9'的ASCII值。这里可能很安全,但是OP的帖子并没有激发出很多信心...... –