Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/163.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 如何将单字符转换为双字符_C++ - Fatal编程技术网

C++ 如何将单字符转换为双字符

C++ 如何将单字符转换为双字符,c++,C++,我试图创建一个程序,可以计算简单的数学表达式,如“4+4”。表达式由用户提供 程序将其保存在字符*中,然后搜索二进制运算(+、-、*、:)并执行该运算 问题是我不知道如何将单字符字符转换为双字符值 我知道有atof函数,但我想转换单个char 有一种方法可以在不创建char*的情况下实现这一点。achar通常表示一个字符。但是,单个char只是一个范围至少为[-127,+127](有符号版本)或至少为[0255](无符号版本)的整数 如果获得的字符看起来像数字,则其中存储的值是表示该字符的ASC

我试图创建一个程序,可以计算简单的数学表达式,如“4+4”。表达式由用户提供

程序将其保存在
字符*
中,然后搜索二进制运算(+、-、*、:)并执行该运算

问题是我不知道如何将单字符
字符
转换为
双字符

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


有一种方法可以在不创建
char*
的情况下实现这一点。

a
char
通常表示一个字符。但是,单个
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