第41行中的“0”是什么意思?

第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”是什么意思?

+0

感谢大家的快速回复。 – Brandon 2009-12-16 05:52:44

nextChar - '0'返回一个字符的整数值。例如,如果字符值为'1'(这是ASCII 0x31),那么如果减去'0'(即0x30),则得到值1.因为ASCII值为'0' - '9'是连续的,所以技术将起作用。

+1

我知道的所有代码集都保持10个十进制数字连续 - 甚至像EBCDIC那样不保持字母表连续的那些代码集。 – 2009-12-16 05:46:37

+0

以这种方式从数字中获取数字的代码与字符集无关。该语言保证'0'到'9'是连续的。 – 2009-12-16 06:08:13

它将nextChar中引用的数字(以ASCII表示)转换为其实际值。因此,如果ASCII值为'5',则从'5'减去'0'会得出数字值5.

此转换允许您对通过键盘输入的值执行数学运算。

它将相应于该数字的ASCII码转换为数字本身。

所以它将采取字符'1',并给你的号码1。等其他数字。

'0'返回0字符(即48)的ascii码。它允许数字值(例如7)之间的容易翻译中,它是ASCII eqvivalent(这是55,因为你可以看到here):7 + 0 = 7 + 48 = 55

在未来,请剥离你的例子到最少量的代码来充分提出你的问题。

'0'与0不同,0表示ASCII码,0表示0。字符“0”,值48 线

n = nextChar - '0'; 

可以很容易地被编写为

n = nextChar - 48 

的线是做某种转换一个数字的ASCII表示到的实际整数表示。

+0

好的。没问题。 – Brandon 2009-12-16 05:57:35

假设c是“0”之间的char和“9”

根据定义,字符只是小 整数,因此炭变量和 常数等同于 算术表达式整数。这是 自然方便;例如 c-'0'是一个整数表达式,其值为0到9之间的一个 值,对应于 存储在c中的字符'0'到'9'。 Kernighan and Ritchie