使用s [i] - '0'

时间:2015-11-01 19:29:21

标签: c++ char

以下代码基本上采用字符串并将其转换为整数值。我不明白为什么int digit = s[i] - '0';是必要的。为什么不能使用int digit = s[i]代替它呢? -'0'有什么目的?

int main(){

    string s = "123";
    int answer = 0;
    bool is_negative = false;
    if (s[0] == '-')
    {
        is_negative = true;
    }
    int result = 0;
    for (int i = s[0] == '-' ? 1 : 0; i < s.size(); ++i)
    {
        int digit = s[i] - '0';
        result = result * 10 + digit;
    }

    answer = is_negative ? -result : result;
    cout << answer << endl;
    system("pause");
}

3 个答案:

答案 0 :(得分:2)

首先,在你的问题标题中

  

使用'0'

应该写成

  

使用s[i] - '0'

也就是说,通过减去char 0 ASCII value(表示为'0'),我们得到int中代表的数字的char值格式(主要是ASCII值。)

答案 1 :(得分:0)

这是因为s [i]中的值是char类型。

要将char'1'转换为整数,请执行'1' - '0'得到1.这由ASCII表中的位置确定,char'0'为48,而char'1'为49.

答案 2 :(得分:0)

减法的原因是int hour = Integer.parseInt(time.substring(0, 2)); int minute = Integer.parseInt(time.substring(3)); 例如是s[i]。值'6'的计算结果为'6'(ascii代码)。 &#39; 0&#39;的ASCII码是54 = 6,这是以'6' - '0'表示的char值。