C++ 有人能解释一下吗';0'&引用; #包括//cin,cout 使用名称空间std; 内部主(空) { charc[80]; int i,和=0; c.getline(c,80); 对于(i=0;c[i];i++)//c[i]!='\0' 如果('0'
,则将字符从其字符代码(例如,ASCII中为48)转换为一个字符因此,它将字符<代码> '0' <代码>为整数0。正如Pete Becker在C语言和C++语言定义中所注释的那样,要求所有数字字符都是连续的。 '0'返回0的ASCII值。因此,使用数字而不是ASCII值,需要偏移量为ASCII值0。C++ 有人能解释一下吗';0'&引用; #包括//cin,cout 使用名称空间std; 内部主(空) { charc[80]; int i,和=0; c.getline(c,80); 对于(i=0;c[i];i++)//c[i]!='\0' 如果('0',c++,arrays,string,C++,Arrays,String,,则将字符从其字符代码(例如,ASCII中为48)转换为一个字符因此,它将字符 '0' 为整数0。正如Pete Becker在C语言和C++语言定义中所注释的那样,要求所有数字字符都是连续的。 '0'返回0的ASCII值。因此,使用数字而不是ASCII值,需要偏移量为ASCII值0。 “1”-“0”:=49-48::=1(49和48分别是1和0的ASCII值)。它将字符转换为整数值: #include <iostream> // cin, cout using namespace
“1”-“0”:=49-48::=1(49和48分别是1和0的ASCII值)。它将字符转换为整数值:
#include <iostream> // cin, cout
using namespace std;
int main(void)
{
char c[80];
int i, sum=0;
cin.getline(c,80);
for(i=0; c[i]; i++) // c[i] != '\0'
if('0'<=c[i] && c[i]<='9') sum += c[i]-'0';
cout<< "Sum of digits = " << sum << endl;
getchar();
getchar();
return 0;
}
0的ascii值是48,1的ascii值是49,依此类推。现在在你的程序中,
c[80]
是一个字符数组。因此,如果你从键盘输入1,编译器将其视为49(ascii值)进行算术运算。这就是为什么我们需要减去ascii值0(即48)获取等效整数。这可以通过从字符中减去“0”或直接减去48来实现。
e、 g.如果将
sum+=c[i]-“0”;
替换为sum+=c[i]-48;
,代码也会起作用。但这不是一个好的做法。希望这有帮助。看看ASCII表,你会发现一些有用的东西。我不会说这是一个完全相同的。那是关于'a'-'0'
,这大部分是无意义的巧合,依赖于字符集。这个问题是关于减去'0'
。'9'
,我认为这是一个很好的定义。现在,这里的一些解释确实普遍适用于这个问题,但它们是不同的问题。哇,这么多非常详细的错误答案!
(如果问题没有结束,我会将此作为答案发布)它与ASCII无关(好吧,不是直接的)C和C++语言定义要求<代码> '0' <代码> ->代码> '9' <代码>具有连续和升序的值。这使得<代码> CH-‘0’< /代码>工作;否则,将没有简单、明智的机制将表示数字的字符转换为它们所代表的值。不仅仅是ASCII码。
character | ASCII code | expression | equivalent | result
'0' | 48 | '0' - '0' | 48 - 48 | 0
'1' | 49 | '1' - '0' | 49 - 48 | 1
'2' | 50 | '2' - '0' | 50 - 48 | 2
'3' | 51 | '3' - '0' | 51 - 48 | 3
'4' | 52 | '4' - '0' | 52 - 48 | 4
'5' | 53 | '5' - '0' | 53 - 48 | 5
'6' | 54 | '6' - '0' | 54 - 48 | 6
'7' | 55 | '7' - '0' | 55 - 48 | 7
'8' | 56 | '8' - '0' | 56 - 48 | 8
'9' | 57 | '9' - '0' | 57 - 48 | 9