黑马程序员技术交流社区

标题: 有个代码请详细 帮我分析一下,看不太懂 [打印本页]

作者: 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
从今以后 发表于 2015-1-16 20:36
int count[4]={0,0,0,0}; // 对应记录ABCD次数
int sortC[]={0,1,2,3}; // 对应四个字母的顺序
count[temp  ...

感谢:lol:lol
作者: 15021367785    时间: 2015-1-17 21:15
15021367785 发表于 2015-1-17 20:55
感谢

谢谢 了  。标注的很清楚




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2