第41行中的“0”是什么意思?
#include <iostream>
#include <cctype> // isdigit
using namespace std;
// Global buffer
const int LINE_LENGTH = 128;
char line[LINE_LENGTH];
int lineIndex;
void getLine() {
// Get a line of characters.
// Install a newline character as sentinel.
cin.getline (line, LINE_LENGTH);
line[cin.gcount() - 1] = '\n';
lineIndex = 0;
}
enum State {eI, eF, eM, eSTOP};
void parseNum (bool& v, int& n) {
int sign;
State state;
char nextChar;
v = true;
state = eI;
do {
nextChar = line[lineIndex++];
switch (state) {
case eI:
if (nextChar == '+') {
sign = +1;
state = eF;
}
else if (nextChar == '-') {
sign = -1;
state = eF;
}
else if (isdigit (nextChar)) {
sign = +1;
n = nextChar - '0'; // line 41
state = eM;
}
else {
v = false;
}
break;
case eF:
if (isdigit (nextChar)) {
n = nextChar - '0';
state = eM;
}
else {
v = false;
}
break;
case eM:
if (isdigit (nextChar)) {
n = 10 * n + nextChar - '0';
}
else if (nextChar == '\n') {
n = sign * n;
state = eSTOP;
}
else {
v = false;
}
break;
}
}
while ((state != eSTOP) && v);
}
int main() {
bool valid;
int num;
cout << "Enter number: ";
getLine();
parseNum (valid, num);
if (valid) {
cout << "Number = " << num << endl;
}
else {
cout << "Invalid entry." << endl;
}
return 0;
}
第41行中的'0'是什么意思?此行是否将下一个字符减去nextChar的第一个字符?第41行中的“0”是什么意思?
nextChar - '0'
返回一个字符的整数值。例如,如果字符值为'1'(这是ASCII 0x31),那么如果减去'0'(即0x30),则得到值1.因为ASCII值为'0' - '9'是连续的,所以技术将起作用。
我知道的所有代码集都保持10个十进制数字连续 - 甚至像EBCDIC那样不保持字母表连续的那些代码集。 – 2009-12-16 05:46:37
以这种方式从数字中获取数字的代码与字符集无关。该语言保证'0'到'9'是连续的。 – 2009-12-16 06:08:13
它将nextChar中引用的数字(以ASCII表示)转换为其实际值。因此,如果ASCII值为'5',则从'5'减去'0'会得出数字值5.
此转换允许您对通过键盘输入的值执行数学运算。
它将相应于该数字的ASCII码转换为数字本身。
所以它将采取字符'1'
,并给你的号码1
。等其他数字。
在未来,请剥离你的例子到最少量的代码来充分提出你的问题。
'0'与0不同,0表示ASCII码,0表示0。字符“0”,值48 线
n = nextChar - '0';
可以很容易地被编写为
n = nextChar - 48
的线是做某种转换一个数字的ASCII表示到的实际整数表示。
好的。没问题。 – Brandon 2009-12-16 05:57:35
假设c是“0”之间的char
和“9”
根据定义,字符只是小 整数,因此炭变量和 常数等同于 算术表达式整数。这是 自然方便;例如 c-'0'是一个整数表达式,其值为0到9之间的一个 值,对应于 存储在c中的字符'0'到'9'。 Kernighan and Ritchie
感谢大家的快速回复。 – Brandon 2009-12-16 05:52:44