Jonathan261
首先你定义的x是个数组吧,它存放26个整型,即当好存放26个字母所对应的是下标。数组的话里面的下标就一定要是整型,即int型。而你定义的数组s是字符型的,咱先别管x[s[i]-'a']++这个里面的,咱就先看你首先不是不要保证x数组里面的为整数,C语言定义两个字符相加或相减得到的就是整数,即你里面的(s[i]-'a')两个都是字符,就能保证x【】里面的数为整型,因为是数组么,所以要保证里面是int型,规定。然后再看x数组里面的,也就是s[i]-'a',这句你先看它上面的if语句,s[i] >= 'a'&&s[i]<= 'z'它是判断当前这个字符是不是小写字母,如果是的话,就让这个字符与字符‘a’相减,而这个结果得到的就是按照字母abcd....顺序在x数组中所存放的下标。举个例子,当前字符为‘a’,为小写字母,然后它与‘a’相减,结果为0,那它是不是当好存放在你定义的x数组的第一个位置,因为数组下标从0开始的嘛,找到存放在第一个位置,然后++,表示找个a字母一个所以加1. 后面的大写A是一样的道理,这个程序并没有分开存放大小写,只要是A或者a就存放在x数组的第一个举个例子,当前字符'D',根据前面的if语句判定它是一个大写字母,然后就让它与'A'相减,得到的是整型3,那么就是x[3],然后++表示找到找到字符D所以加1,x[3]表示x数组的第四个元素,因为下标是从0开始的嘛,刚好D在字母表中也是第四个元素,所以其实就是一一对应,将字母表中的顺序对应到x数组中
优质英语培训问答知识库