我尝试创建一个可以评估简单数学表达式(如“4 + 4”)的程序。表达式由用户给出。如何将单个字符转换为双精度
该程序将其保存在char*
中,然后搜索二元运算(+, - ,*,:)并执行操作。
问题是,我不知道如何将单个char
转换为double
值。
我知道有atof
函数,但我想转换单个char
。
有没有办法做到这一点,而不创建一个char*
?
我尝试创建一个可以评估简单数学表达式(如“4 + 4”)的程序。表达式由用户给出。如何将单个字符转换为双精度
该程序将其保存在char*
中,然后搜索二元运算(+, - ,*,:)并执行操作。
问题是,我不知道如何将单个char
转换为double
值。
我知道有atof
函数,但我想转换单个char
。
有没有办法做到这一点,而不创建一个char*
?
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
'数字 - '0'''是便携式;它不假定ASCII,并且可以用于任何**字符编码。 –
如果它是一个字符,为什么不明确检查数字?或者将它用作int(ASCII表),'0'到'9'表示为48到57 ... – sperber
'程序将它保存在char *中 - 这不会发生。您将字符保存到缓冲区中,而不是指向指针。 – PaulMcKenzie
你的问题不是很清楚。你的意思是''0'=> 0' ...''9'=> 9'并且所有其他非数字字符都是错误的吗? –