涉及char数组的C语句的含义

我正在研究一个项目的算法,我遇到了一些我认为可能有用的代码。 但是,当我尝试阅读代码时,我在理解代码中的语句时遇到了一些困难。 这是代码。

int firstWord[MAX_WORD_SIZE] = {0}, c = 0; while (word1[c] != '\0') //word1 is char[] sent as a parameter { firstWord[word1[c]-'a']++; c++; } 

我理解(我希望是正确的)第一行是设置我的最大大小的整数数组,并将元素初始化为零,同时使初始计数器值“c”为零。

我知道while循环遍历word1[]数组的所有字符,直到它到达最后的char '\0'

我对第一行firstWord[word1[c]-'a']++;的行感到困惑firstWord[word1[c]-'a']++; word1[c]应该给一个char,那么-'a'做什么呢? 这会将char转换为一个整数,允许您访问firstWord[]数组的元素并使用++递增吗? 如果是这样, word1[c]-'a'给出了哪个元素或整数

这是一个计算单词中字母az的数量的程序。 这里的关键点是, 'a' - 'a'的值为0'b' - 'a'的值为1 ,等等。

例如,如果word1[c]是字母'd' ,那么'd' - 'a'3 ,所以它会增加firstWord[3] 。 当单词逐字逐句迭代时, firstWord[3]包含单词中字母'd'的数字。

word1 [c] – ‘a’表示word1的第c个位置的字符与’a’的整数值之间的差。 基本上它会计算单词中出现的字母数。

因此,如果word1 [c]为’b’,则word1 [c] – ‘a’的值将为(’b’ – ‘a’)= 1.因此,单词中’b’的出现次数将为增加1。

看来这段代码正在做一个字母计数

1那么做什么做’-a’呢?

如果word1 [c]是’a’,则word1 [c] – ‘a’为0

2。 这会将char转换为一个整数,允许您访问firstWord []数组的元素并使用++递增吗?

是的,它是整数提升

3.如果是,哪个元素或整数由word1 [c] – ‘a’给出

如果word1 [c]是’a’,则word1 [c] – ‘a’为0