首页 > 解决方案 > 我不明白将字符串转换为 int 的过程

问题描述

给定以下代码。这个问题是 Leet Code 415。

string addStrings(string num1, string num2) {
        
        string res;
        int sum = 0;
        int i = num1.size() - 1;
        int j = num2.size() - 1;
        
        
        while(i >= 0 && j >= 0)
        {
            sum += (num1[i--] - '0') + (num2[j--] - '0'); // this problem point
            res.push_back(char(sum%10 + '0'));
            sum = sum/10;
        }
        
        while(i >= 0)
        {
            sum += (num1[i--] - '0');
            res.push_back(char(sum%10 + '0'));
            sum = sum/10;
        }
        
        while(j >= 0)
        {
            sum += (num2[j--] - '0');
            res.push_back(char(sum%10 + '0'));
            sum = sum/10;
        }
        
        if(sum > 0)
            res.push_back(char(sum%10 + '0'));
        reverse(res.begin(), res.end());
        
        return res;
    }

我不明白将字符串转换为 int 的过程。当我从字符串中减去“0”时,为什么它是一个 int?如果它不改变int,怎么可能对字符串进行操作?

标签: c++

解决方案


所以ascii的工作方式是连续的数字彼此跟随。如果一串字符只包含数字,则可以通过从中减去这些数字来获得这些数字'0'。在 ascii'0' = 0x30'1' = 0x31中。

在您的代码num[i--] - '0'中,只需检查您在 ascii 表中的“距离” '0',如果它确实是一个数字,则给出正确的数字。

此外,您不会将字符串转换为任何内容(至少在特定行上)。您访问一个元素,它是charc++ 中的整数类型。


推荐阅读