统计不同字母的C程序中a[b]++与if(a[i])的作用疑问
代码关键语句解释
这段代码的目标是统计输入(格式为{a,b,c}这类大括号包裹、逗号分隔的小写字母集合)中出现的不同小写英文字母的数量。
a[b]++ 语句的作用
- C语言中
char类型本质是对应ASCII编码的整数,比如小写字母a的ASCII值为97、b为98,符号{的ASCII值为123等。 - 数组
a在这里充当计数桶的作用(注:原代码声明int a[0]为零长度数组,属于标准C中的未定义行为,要正常运行需修改为int a[256] = {0};,覆盖所有ASCII字符的下标需求),每读取到一个字符b,就将下标为b的ASCII值的数组元素计数加1,记录该字符出现的次数。
if(a[i]) 判断的作用
- 后续
for循环遍历的范围是小写字母a到z对应的ASCII值区间 - 若
a[i]的值不为0,说明ASCII值为i的小写字母在之前的输入中出现过,此时就给统计不同字母数量的变量p加1,最终输出的p就是输入中出现过的不同小写字母总数。
举个实际运行例子:输入为{a,b,c}时,读取过程中a['a']、a['b']、a['c']的计数都被加1,其余小写字母对应的计数为0,最终p值为3,符合预期功能。
内容的提问来源于stack exchange,提问作者airismything
相关产品推荐
相关产品推荐

