从字符数组的元素中减去'a'是什么意思
What's the meaning of subtracting 'a' from elements of char array
a[s1[i] - 'a']
和int a[26] = {0}
(我不确定,但它是否用于将数组的每个元素初始化为 0 值(
int main()
{
char s1[10010], s2[10010];
cin >> s1 >> s2;
int a[26] = {0};
for(int i = 0; i < strlen(s1); i++)
a[s1[i]-'a']++;
for(int i = 0; i < strlen(s2); i++)
a[s2[i]-'a']--;
long long int ans = 0;
for(int i = 0; i < 26; i++)
ans += abs(a[i]);
cout << ans << endl;
return 0;
}
这意味着有人在做假设。您可以使用表示整数的字符来执行此操作:c - '0'
将为您提供对应于字符'0'
、'1'
、'2
'、...'9
'。这是由语言定义保证的。对于任何其他字符值,没有此类保证。因此,此代码猜测c - 'a'
将生成一个数值,该数值以某种方式反映c
表示的字符。在最常见的字符编码中,它有效;在ASCII中,这是迄今为止使用最广泛的,如果c
表示小写字母,则c - 'a'
映射'a'
到0,'b'
映射到1,...,'z'
映射到25。但是有些字符表示是不正确的。
但请注意,此代码不执行任何输入验证。如果有人键入了"Z"、"0"或";"(仅举几例(,生成的索引将超出数组边界,并且可能会发生不好的事情。
至于int a[26] = {0};
,这称为聚合初始化。数组是一个聚合,也就是说,它包含多个值。表单的初始值设定项{something}
something
复制到聚合中的第一个元素,并将其余元素设置为 0。因此int a[26] = {0};
数组的所有 26 个元素a
设置为 0。
聚合初始化中的初始值设定项不必具有值 0。int a[26] = {3};
会将数组的第一个元素(a[0]
(设置为3,数组的其余元素设置为0。
聚合初始化不限于单个值。您可以拥有任意数量的值,用逗号分隔。因此,int a[26] = { 1, 2, 3 };
将前三个元素分别设置为 1、2 和 3,其余元素设置为 0。如果初始值设定项多于元素,则忽略多余的初始值设定项。
通常,表达式(c
char
(
c - 'a'
用于取范围 ['a'
,'z'
] 中的字符(由于其在英文字母表上的根,大小为26
(并计算该字母的索引(例如'a'
0
,'b'
1
,等等(。
同样,当您看到:
c - '0'
它通常用于计算 [0
,9
] 范围内的字符的"数字"值,例如'5'
(字符(映射到5
(整数(。
> 1(a
是一个包含 26 个条目的数组,字母表中每个字母对应一个条目。但是字符'a'
的值与 0 不同,因此要获取数组的第 n 个字母,您需要s1[i]-'a'
.
2(int a[26] = {0}
数组的第一个元素中放一个零,然后默认初始化其余元素(意味着整数也为零,所以请注意它不会做你认为它做的事情(,我会说使用std::vector<int> a(26, 0);
代替。您仍然可以使用int a[26] = {}
用0
s 初始化它,并明确表示您了解{0}只会将数组的第一个元素初始化为此值,而不是整个数组:http://www.cplusplus.com/doc/tutorial/arrays/
当然,该程序仅在仅输入小写字母时才有效。如果输入了任何其他内容,则程序的行为是未定义的,并且可能会崩溃。
int a[26] = {0};
它只是初始化名为"A"的数组中所有项目,带有零。 使用大括号初始化语法初始化内置类型数组时,可能会发生两种类型的初始化。如果初始值设定项少于数组大小,则使用相应的值初始化前 N 个元素,并使用默认构造函数初始化其余元素。对于内置类型,默认构造函数执行零初始化。
a[s1[i] - 'a']
内部字符是简单的十进制数字。每个字符都有与之关联的唯一代码。(见 https://en.m.wikipedia.org/wiki/ASCII( 如果数组 "s1" 包含小写拉丁符号,则s[i]
在位置 "i" 处获取符号。然后我们从符号s1[i]
的代码中减去符号'a'的代码,得到符号s1[i]
的字母顺序数(从零开始计数(。例如:'a'-'a' = 0
、'b' - 'a' = 1
然后我们使用计算的"数字"来访问数组"a"中位置"数字"的元素
a[s1[i] - 'a']
值s1[i]
减去 ascii 值 'a' 将是a[]
的索引。 确保s1[i]
大于字符的 ASCII 值。
关于下面,第一个元素将设置为 0
int a[26] = {0};
- 这个语法std::class<>{}(arg1, arg2) 在C++中是什么意思?
- 标准 N3337 5.2.10 第 7 条中的C++"类型"是什么意思?
- "类模板示例<int>;"语句对 C++11 是什么意思?
- 线应该是什么意思
- "CID"在AT+HTTPPARA= "CID" ,1中是什么意思
- 表达式"b=(b-x)&x"是什么意思?
- 这个表达是什么意思?
- 此代码验证公式是什么意思?
- 跟踪日志中的T.11803()是什么意思?
- 这个额外的关键字在这个 c++ 类声明中是什么意思?
- * 和 ** 在 C++ 函数声明中是什么意思?
- _T("xyz")是什么意思?
- #define Dbg(fmt,..) (0) 是什么意思? 警告:表达式无效
- 这行代码到底是什么意思?
- 当我们说在执行程序时将操作系统的控制权传递给main()函数时,我们的意思是什么
- 这句话在c++中的意思是什么
- 这个typedef的意思是什么
- 这句话的意思是什么
- 意思是什么
- 这个句法的意思是什么?