Zac*_*ary 3 c++ char indices character-set
我对这一行感到困惑:
sum += a[s[i] - '0'];
Run Code Online (Sandbox Code Playgroud)
给出一些上下文,这是代码的其余部分:
#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;
}
Run Code Online (Sandbox Code Playgroud)
- '0'
(或不太便携- 48
,仅适用于ASCII)用于通过十进制代码将数字字符手动转换为整数,C++(和 C)保证所有编码中的连续数字。
例如,在EBCDIC 中,代码范围从240
for'0'
到249
for '9'
,这适用于- '0'
,但会失败- 48
)。仅出于这个原因,最好始终- '0'
像您一样使用符号。
用于ASCII例如,如果'1'
的ASCII码是49
和'0'
的ASCII码是48
,49 - 48 = 1
,或在推荐的格式'1' - '0' = 1
。
因此,正如您现在可能已经想到的那样,您可以使用这个简单的算术从字符中转换所有 10 位数字,只需减去'0'
,在另一个方向上,您可以通过添加'0'
.
除此之外,代码中还有一些其他问题:
0
,但在指数1
,所以如果你的字符串输入,例如,"10"
在sum
将a[1]
+ a[0]
,但a[0]
尚未分配的值,因此行为是不确定的,你需要WACH了这些情况。for (int i = 0; i < 5; i ++)
cin >> a[i];
Run Code Online (Sandbox Code Playgroud)
索引从0
to会更合适,4
因为数组有 5 个索引,如果你想输入从 1 到 5 的数字,你可以稍后1
从 to 索引中减去。