我对这一行感到困惑:
sum += a[s[i] - '0'];
为了提供一些上下文,这是代码的其余部分:
#include <iostream>
using namespace std;
int main() {
int a[5];
for (int i = 1; i <= 4; i++)
cin >> a[i];
string s;
cin >> s;
int sum = 0;
for (int i = 0; i < s.size(); i++)
sum += a[s[i] - '0'];
cout << sum << endl;
return 0;
}
- '0'
(或不太便携- 48
, for ASCIIonly) 用于通过十进制代码手动将数字字符转换为整数,C++(和 C)保证所有编码中的连续数字。
In EBCDIC,例如,代码范围为240
for '0'
to 249
for '9'
,这将很好地与- '0'
,但会失败- 48
). 仅出于这个原因,最好始终使用- '0'
符号像你所做地。
对于 ASCII 示例,如果'1'
的 ASCII 码是49
and '0'
的 ASCII 码是48
, 49 - 48 = 1
,或采用推荐的格式'1' - '0' = 1
.
因此,正如您现在可能已经了解的那样,您可以使用这个简单的算术将字符中的所有 10 位数字转换为,只需减去'0'
在另一个方向上,您可以通过添加将所有数字转换为其字符编码'0'
.
除此之外,代码中还存在一些其他问题:
- 数组不会在索引处开始填充
0
,但在索引处1
,因此,如果您的字符串输入是,例如,"10"
the sum
将a[1]
+ a[0]
, but a[0]
没有分配值,所以行为未定义,您需要留意这些情况。
for (int i = 0; i < 5; i ++)
cin >> a[i];
更合适的是,索引来自0
to 4
,由于数组有5个索引,如果你想输入1到5之间的数字,你可以减去1
稍后从 到索引。
- 正如评论部分所指出的,错误的输入(例如字母字符)也会引发未定义的行为。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)