使用 s[i] - '0'

Use of s[i] - '0'

本文关键字:使用      更新时间:2023-10-16

下面的代码基本上接受一个字符串并将其转换为整数值。我不明白的是为什么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");
}

首先,在您的问题标题中

使用"0"

应该写成

s[i] - '0' 的使用

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

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

若要将字符"1"转换为整数,请执行"1"-"0"以获得1。这是由ASCII表中的位置决定的,字符"0"是48,而字符"1"是49。

减法的原因是s[i]是例如'6'。值'6'计算为54(ascii码)。"0"的ASCII代码为48。因此'6' - '0'=6,这是表示为int的字符值。