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

时间:2009-12-16 05:39:21

标签: visual-c++

#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的第一个字符?

6 个答案:

答案 0 :(得分:7)

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

答案 1 :(得分:5)

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

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

答案 2 :(得分:3)

将来,请将您的示例剥离到最少量的代码,以充分地提出您的问题。

'0'与0的不同之处在于'0'是ASCII,0是,0。 看看ASCII standard。字符“0”是值48。 这条线

n = nextChar - '0';

可以很容易地写成

n = nextChar - 48

该行正在进行某种将数字的ASCII表示转换为实际的整数表示。

答案 3 :(得分:2)

它从对应于数字的ASCII码转换为数字本身。

因此它会占用角色'1',并为您提供数字1。等等其他数字。

答案 4 :(得分:1)

'0'返回0字符的ascii代码(即48)。它允许在数值(例如7)和它的ascii eqvivalent(55,如你所见here)之间进行简单的转换:7 +'0'= 7 + 48 = 55

答案 5 :(得分:1)

假设c是'0'和'9'之间的char

  

根据定义,字符很小   整数,所以char变量和   常数与ints相同   算术表达式。这是   自然方便;例如   c-'0'是一个带有的整数表达式   对应于0到9之间的值   字符'0'到'9'存储在c中。   Kernighan and Ritchie