A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

5、 从键盘输入一大堆字符串,统计A、B、C、D的出现次数,最后出现次数由高到低输出字母和出现次数。(C语言)

思路分析
        1.获取字符串
        2.声明4个变量a,b,c,d分别存储‘A’,’B‘,‘C’,‘D‘出现的次数
        3.从第一个字符开始遍历字符串,如果当前字符是A或B或C或D,就将对应的变量加1
        4.将a,b,c,d存于int类型数组中由大到小排序
        5.虽然abcd进行了排序但是值并没有改变,所以遍历int类型数组,如果第一个位置值于a相等即可输出A,于b相等可输出B,以此类推
#include <studio.h>
void PrintStr(char *s);//定义方法
int main ()
{
    //定义字符串
    char * str;
    //接收字符串,并赋值
    scanf("%s",str);
    //调用方法,输出
    PrintStr(str);
    return 0;
}
//声明方法
void PrintStr(char *s)
{
    int i=0;//i表示字符串第i处的位置
    int a=0;//a表示'A'出现的次数
    int b=0;//b表示'B'出现的次数
    int c=0;//c表示'C'出现的次数
    int d=0;//d表示'D'出现的次数
    while(s[i]!='\0')//字符串的结束标志就是\0,如果遇到\0表示字符串遍历结束
    {
        //如果第i处的字符为A,则a加1
       if(s[i]=='A')
        {
            a++;
        }

        //如果第i处的字符为B,则b加1
        else if(s[i]=='B')
        {
            b++;
        }

        //如果第i处的字符为C,则c加1
        else if(s[i]=='C')
        {
            c++;
        }

        //如果第i处的字符为D,则d加1
        else if(s[i]=='D')
        {
            d++;
        }        
     }
    //将a,b,c,d存于数组中
    int arry[4]={a,b,c,d};
   int temp=0;
//外层循环,表示当前的位置
   for(int j=0;j<4;j++)
   {
        //内层循环,将当前位置的值与其后面的所有值分别比较大小
        for(int k=j+1;k<4-j;k++)
        {
           //如果后面的值比前面的值大,那么就将两个值交换位置
           if(arry[k]>arry[j])
           {
                temp=arry[j];//先记录arry[j]的值
                arry[j]=arry[k];//在对arry[j]赋值arry[k]
                //因为arry[j]的先前值已经保存在temp中,并且arry[j]的值已经变为//arry[k]
                //所以arry[k]不能再等于arry[j]而是等于temp
                arry[k]=temp;
            }
        }
    }
    //遍历数组对应 a b c d,输出相应值
    for(int j=0;j<4;j++)
    {
        //如果arry[i]值为a,则输出A
        if(arry[i]==a)
        {
            printf("a chu xian le%dci\n",arry[i]);
        }
        //如果arry[i]值为b,则输出B
        else if (arry[i]==b)
        {
            printf("b chu xian le%dci\n",arry[i]);
        }
        //如果arry[i]值为c,则输出C
        else if (arry[i]==c)
        {
            printf("c chu xian le%dci\n",arry[i]);
        }
        //如果arry[i]值为d,则输出D
        else if (arry[i]==d)
        {
            printf("d chu xian le%dci\n",arry[i]);
        }
     }   
}

0 个回复

您需要登录后才可以回帖 登录 | 加入黑马