从char数组的元素中减去“ a”是什么意思

时间:2018-10-13 10:04:04

标签: c++ arrays char

i> a [s1 [i]-'a'] 和 ii> 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;

    }

5 个答案:

答案 0 :(得分:3)

这意味着有人在做假设。您可以使用代表整数的字符来做到这一点: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};设置数组{{1 }}设为0。

聚合初始化中的初始化程序不必具有值0。a会将第一个元素(int a[26] = {3};)设置为3,并将数组的其余元素设置为0。 / p>

聚合初始化不限于单个值。您可以根据需要使用任意多个值,并用逗号分隔。因此a[0]会将前三个元素分别设置为1、2和3,其余所有元素都设置为0。而且如果初始化程序多于元素,则多余的将被忽略。

答案 1 :(得分:1)

通常,表达式(cchar

c - 'a'

用于获取['a''z']范围内的字符(由于其根源于英语字母,因此大小为26),并为字母(例如'a'0'b'1等)。


类似地,当您看到:

c - '0'

通常用于计算[09]范围内的字符的“数字”值,例如'5'(字符)已映射到5(整数)。

答案 2 :(得分:1)

1)a是一个包含26个条目的数组,每个字母对应一个字母。但是字符'a'的值不同于0,因此要获取数组的第n个字母,请执行s1[i]-'a'

2)int a[26] = {0}在数组的第一个元素中放置一个零,然后默认初始化其余的元素(对于整数也意味着零,因此请注意,它不会执行您认为的操作),并且我会说改用std::vector<int> a(26, 0);。您仍然可以使用int a[26] = {}0对其进行初始化,并清楚地了解,您知道{0}仅将数组的第一个元素而不是整个数组初始化为该值:{{ 3}}

当然,该程序仅在仅输入小写字母时才起作用。如果输入了其他任何内容,则该程序的行为是不确定的,并且可能会崩溃。

答案 3 :(得分:1)

int a[26] = {0};

这只是初始化名为“ a”的数组中所有带有零的项。 当使用大括号初始化语法初始化内置类型的数组时,可能会发生两种类型的初始化。如果初始化程序少于数组大小,则使用相应的值初始化前N个元素,并使用默认构造函数初始化其余元素。对于内置类型,默认构造函数执行零初始化。

a[s1[i] - 'a']

内部char是简单的十进制数字。每个字符都有与之关联的唯一代码。 (请参见https://en.m.wikipedia.org/wiki/ASCII) 如果数组“ s1”包含小写拉丁文符号,则s[i]在位置“ i”处使用符号。然后我们从符号s1[i]的代码中减去符号'a'的代码,得到符号s1[i]的字母数字(从零开始计数)。例如:'a'-'a' = 0'b' - 'a' = 1 然后,我们使用计算出的“数字”来访问数组“ a”中位于“数字”位置的元素

答案 4 :(得分:0)

a[s1[i] - 'a']的{​​{1}}值中的

减去'a'的ascii值将是s1[i]的索引。确保a[]大于字符的ascii值。

以及下面的内容,第一个元素将设置为0

s1[i]