gpt4 book ai didi

c++ - 为什么需要在索引中添加 '0' 才能访问数组值?

转载 作者:行者123 更新时间:2023-12-01 14:11:35 24 4
gpt4 key购买 nike

我对这一行感到困惑:

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,仅适用于ASCII)用于通过数字字符的十进制代码,C++ (和 C) 保证所有编码中的连续数字。

EBCDIC ,例如,代码范围从 '0'240'9'249,这将使用 - '0' 可以正常工作,但使用 - 48 会失败)。 仅出于这个原因,最好始终像您一样使用 - '0' 表示法

以 ASCII 为例,如果 '1' 的 ASCII 码是 49 并且 '0' 的 ASCII 码是 4849 - 48 = 1,或采用推荐的格式'1' - '0' = 1

所以,正如您现在可能已经想到的那样,您可以使用这个简单的算术将字符中的所有 10 位数字转换为它是通过添加 '0' 进行字符编码。

除了代码中还有一些其他问题:

  • 数组不会在索引 0 处开始填充,而是在索引 1 处开始填充,因此如果您的字符串输入例如是 "10" sum 将是 a[1] + a[0],但 a[0]没有赋值,所以 behaviour is undefined ,您需要注意这些情况。
for (int i = 0; i < 5; i ++)
cin >> a[i];

会更合适,索引从04,因为数组有5个索引,如果你想输入1到5的数字,你可以减去1 稍后从 到索引。

  • 正如评论部分所指出的,错误的输入(例如字母字符)也会引发未定义的行为。

关于c++ - 为什么需要在索引中添加 '0' 才能访问数组值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60994353/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com