C++ 如何将单字符转换为双字符
我试图创建一个程序,可以计算简单的数学表达式,如“4+4”。表达式由用户提供 程序将其保存在C++ 如何将单字符转换为双字符,c++,C++,我试图创建一个程序,可以计算简单的数学表达式,如“4+4”。表达式由用户提供 程序将其保存在字符*中,然后搜索二进制运算(+、-、*、:)并执行该运算 问题是我不知道如何将单字符字符转换为双字符值 我知道有atof函数,但我想转换单个char 有一种方法可以在不创建char*的情况下实现这一点。achar通常表示一个字符。但是,单个char只是一个范围至少为[-127,+127](有符号版本)或至少为[0255](无符号版本)的整数 如果获得的字符看起来像数字,则其中存储的值是表示该字符的ASC
字符*
中,然后搜索二进制运算(+、-、*、:)并执行该运算
问题是我不知道如何将单字符字符
转换为双字符
值
我知道有atof
函数,但我想转换单个char
有一种方法可以在不创建
char*
的情况下实现这一点。achar
通常表示一个字符。但是,单个char
只是一个范围至少为[-127,+127](有符号版本)或至少为[0255](无符号版本)的整数
如果获得的字符看起来像数字,则其中存储的值是表示该字符的ASCII数字。数字从代码48(表示零)开始,递增至代码57(表示九)。因此,如果取代码并减去48,则得到整数值。从那时起,将其转换为双倍是铸造的问题
因此:
或者更好,为了方便起见:
char digit = ...
double value = double(digit - '0'); //'0' has a built-in value 48
有一种方法可以做到这一点,而无需创建字符*
当然。您可以从单个字符中提取数字,如下所示:
char c = '4';
double d = c - '0';
// ^^^^^^^ this expression results in a numeric value that can be converted
// to double
这种情况下,某些字符表喜欢从'0'
开始的连续值集中的数字,或者对其进行编码。如果是单个字符,为什么不显式检查数字?或者将其用作int(ASCII表),“0”到“9”表示为48到57…程序将其保存在char*
——这不会发生。您正在将字符保存到缓冲区中,而不是指针中。您的问题不是很清楚。你是说'0'=>0
<代码>'9'=>9
和所有其他非数字字符都是错误?@Erika好吧,我给了你一个答案,如何对单个字符执行该操作。不过,您打算如何处理来自用户输入的“40+40”之类的表达式?假设char是从“0”到“9”的ASCII值。这里可能很安全,但OP的帖子并不能激发人们的信心……digit-“0”
是可移植的;它不采用ASCII,并且适用于任何字符编码。
char c = '4';
double d = c - '0';
// ^^^^^^^ this expression results in a numeric value that can be converted
// to double