黑马程序员技术交流社区
标题: 有个代码请详细 帮我分析一下,看不太懂 [打印本页]
作者: 15021367785 时间: 2015-1-16 11:23
标题: 有个代码请详细 帮我分析一下,看不太懂
#include <stdio.h>
int maxIndex(int a[],int length)
{
int i=0,returnIndex=0;
for(i;i<length;i++)
{
if(a>a[returnIndex]) returnIndex=i;
}
return returnIndex;
}
int main()
{
int count[4]={0,0,0,0};
int sortC[]={0,1,2,3};
int temp;
int i;
while((temp = getchar()) != '\n')
{
if(temp >= 'A' && temp <'E')
{
count[temp - 'A']+=1;
}
}
for(i = 0;i<4;i++)
{
temp = maxIndex(count,4-i);
printf("%c:%d次\n",'A' + sortC[temp],count[temp]);
count[temp]^=count[3-i];
count[3-i]^=count[temp];
count[temp]^=count[3-i];
sortC[temp]^=sortC[3-i];
sortC[3-i]^=sortC[temp];
sortC[temp]^=sortC[3-i];
}
return 0;
}
作者: 从今以后 时间: 2015-1-16 20:36
int count[4]={0,0,0,0}; // 对应记录ABCD次数
int sortC[]={0,1,2,3}; // 对应四个字母的顺序
count[temp - 'A']+=1; // temp - 'A'取值为0~3,刚好对应数组元素
temp = maxIndex(count,4-i); // 用这个函数求出count最大元素下标,也就是出现最多的次数
'A' + sortC[temp] // 因为count顺序还是按字母顺序,没有被打乱,所以A~D刚好对应0~3这几个下标,sortC[temp]求出值{0,1,2,3},加上'A'之后对应A~D的ASCII码
count[temp] // 用下表取出元素值,即该字母出现次数
count[temp]^=count[3-i]; // 后面六句是用a = a ^ b; b = a ^ b; a = a ^ b;方式交换取出来的当前这个元素和所在数组最后一个元素,因为字母次数cout和顺序sortC两个数组都做了交换,所以顺序还是对应的。
for(i = 0;i<4;i++) temp = maxIndex(count,4-i); [3-i] // 这几句意味着第一次比较范围0~3,第二次0~2,...保证了比较过得元素不会再次参与比较
作者: MengDeKaiShi 时间: 2015-1-16 22:14
好久没有看过C语言了啊,感觉好陌生啊
作者: 15021367785 时间: 2015-1-17 20:55
感谢:lol:lol
作者: 15021367785 时间: 2015-1-17 21:15
谢谢 了 。标注的很清楚
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) |
黑马程序员IT技术论坛 X3.2 |