涉及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'
给出了哪个元素或整数
这是一个计算单词中字母a
到z
的数量的程序。 这里的关键点是, '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