c++ - 我不明白将字符串转换为 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,怎么可能对字符串进行操作?
解决方案
所以ascii的工作方式是连续的数字彼此跟随。如果一串字符只包含数字,则可以通过从中减去这些数字来获得这些数字'0'
。在 ascii'0' = 0x30
等'1' = 0x31
中。
在您的代码num[i--] - '0'
中,只需检查您在 ascii 表中的“距离” '0'
,如果它确实是一个数字,则给出正确的数字。
此外,您不会将字符串转换为任何内容(至少在特定行上)。您访问一个元素,它是char
c++ 中的整数类型。
推荐阅读
- powershell - 用于删除上次访问或创建的文件的批处理文件,超过 X 天
- c# - 从 Excel 中提取数据
- angular - Angular - 带有一个选项数组的多项选择
- reactjs - 无法使用 Jest/Enzyme 测试面板内的组件
- asp.net - 如何获取令牌的声明身份或从令牌 oauth2
- css - SCSS:如何不在 CSS 文件中重复声明?
- jquery - 物化 CSS 导航栏菜单下拉菜单不会低于原点
- android - OnBindViewHolder (RecyclerView) - java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
- javascript - 如何根据 Javascript 中的变量值生成动态页面?
- r - 从具有多个统计测试结果列表的列表中提取统计值