以下是引用韩三明在2011-11-27 00:32:24的发言:
我也是初学者
第一个FOR,相当于是把相同的字母放到相同的盒子,每放入一个字母则在该盒子上+1.
第二个FOR,表示盒子里的内容以及盒子上的数字。既该字母出现过的次数。
有疑问的地方是
第一个FOR里,str是字符型,而temp是整数型。为什么可以代入?从下一行的a[temp]++可以看出,temp是整数,就说明str是整数。可str明明是字符。。。
第二个FOR里,printf("%c=%d",i,a) i是数字,为什么输出的时候变成了字符?
请教知道的前辈能!
我也是初学者
第一个FOR,相当于是把相同的字母放到相同的盒子,每放入一个字母则在该盒子上+1.
第二个FOR,表示盒子里的内容以及盒子上的数字。既该字母出现过的次数。
有疑问的地方是
第一个FOR里,str是字符型,而temp是整数型。为什么可以代入?从下一行的a[temp]++可以看出,temp是整数,就说明str是整数。可str明明是字符。。。
第二个FOR里,printf("%c=%d",i,a) i是数字,为什么输出的时候变成了字符?
请教知道的前辈能!
你说的对,因为字符在ascii码里是有编号的,如定义一个char a='b',则当他a以字符输出的时候就是输出b,用整型输出的就是输出它的ascii码98,所以在这个程序里,就是一开始,把个字符的ascii编码当作数组a的下标使用,就可以把不同的字符放到a数组的不同的元素中,该数组元素的值就是该字符出现的次数。
就这样在最后输出的时候,把下标的值又转化成字符输出,元素值就是出现次数;
=========================================
举例子说明,输入abcabc,则,abc的ascii码分别是97,98,99,
则第一次是temp=a(即97),a[97]就自增1,此时a[97]为1;
然后到b的时候,temp=b(即98),则a[98]自增1,此时a[98]为1;
继续c,temp=c(即99),则a[99]自增1,此时a[99]为1;
===
然后有是a,temp=a(即97),a[97]又自增1,此时a[97]为2;
又到b的时候,temp=b(即98),则a[98]又自增1,此时a[98]为2;
继续c,temp=c(即99),则a[99]也自增1,此时a[99]为2;
最后当a[i]!=0,即有记数的时候输出,
当i为97的时候,97对应的字符为a,a[97]为2,就输出a=2;
当i为98的时候,98对应的字符为b,a[97]为2,就输出b=2;
当i为99的时候,99对应的字符为c,a[97]为2,就输出c=2;
=====================================
就因为这样,所以用这种方式得到的答案,是按照字母从小到大的顺序排序输出的。
[ 本帖最后由 luchar 于 2011-11-27 01:39 编辑 ]