黑马程序员技术交流社区

标题: 一道C语言题遇到点小小的问题 [打印本页]

作者: wxy19891017    时间: 2015-4-5 23:16
标题: 一道C语言题遇到点小小的问题
7、 从键盘输入一大堆字符串,统计A、B、C、D的出现次数,最后出现次数由高到低输出字母和出现次数。(C语言)

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    //定义一个数组,存放字符串
    char array[100];
   
    printf("请输入一行字符串:");
    scanf("%s",array);
    //存放A、B、C、D出现的次数
    int a = 0;
    int b = 0;
    int c = 0;
    int d = 0;
    //字符串长度
    unsigned long size = strlen(array);
    //for循环的循环变量
    int i;
    //i小于字符串的长度,执行一次循环体,i+1
    for (int i = 0;i<size;i++)
    {
        //统计'A'出现的次数
        if (array[i] == 'A')
        {
            a++;
        }
        else if (array[i] == 'B')
        {
            b++;
        }
        else if (array[i] == 'C')
        {
            c++;
        }
        else if (array[i] == 'D')
        {
            d++;
        }
    }
    //存放ABCD出现的次数
    int m[4] = {a,b,c,d};
    //定义中间变量,交换元素位置
    int temp;
   
    for (int i = 0;i<3;i++)
    {
        int j;

        for (int j = 0;j<3-i;j++)
        {
            if (m[j]<m[j+1])
            {
                //前一个元素小于后一个元素时,交换位置
                temp = m[j];
                m[j] = m[j+1];
                m[j+1] = temp;
               
            }
        }
    }
    //存放ABCD出现的次数对应的ABCD字符
    char n[4];
   
    for (int i = 0;i<4;i++)
    {
        //如果出现a次,n[i]='A'
        if (m[i] == a && n[0] != 'A' && n[1] != 'A' && n[2] != 'A' && n[3] != 'A')
        {
            n[i] = 'A';
        }
        //如果出现b次,n[i]='B'
        else if (m[i] == b && n[0] != 'B' && n[1] != 'B' && n[2] != 'B' && n[3] != 'B')
        {
            n[i] = 'B';
        }
        //如果出现c次,n[i]='C'
        else if (m[i] == c && n[0] != 'C' && n[1] != 'C' && n[2] != 'C' && n[3] != 'C')
        {
            n[i] = 'C';
        }
        //如果出现d次,n[i]='D'
        else
        {
            n[i] = 'D';
        }

    }
    //降序打印输出每个字母的出现次数
    for (i = 0; i<4; i++)
        printf("%c出现%d次\n",n[i],m[i]);
   
    return 0;
}
这道题是我在基础测试时遇到的,前面有点思路的,但还是在网上找了找,学习学习,借鉴一下。基本都能读明白,唯一有点不明白的就是出现次数的for循环,条件中那么多&&,有点搞不明这个条件有何作用。有没有学长指点下!感激不尽!
作者: 梦想中前行    时间: 2015-4-6 21:14
逻辑关系,自己去基础视频里边看下吧。
作者: wxy19891017    时间: 2015-4-7 23:08
梦想中前行 发表于 2015-4-6 21:14
逻辑关系,自己去基础视频里边看下吧。

大哥,我也知道是逻辑与啊。纠结不知道为什么与上后面的。而不是不知道逻辑与的含义。
作者: 老树    时间: 2015-4-7 23:47
慢慢来 没事




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