黑马程序员技术交流社区

标题: 总结写得题供朋友共同学习计算ABCD出现次数并按出现次数由高到低输出 [打印本页]

作者: qingying5810    时间: 2015-4-14 20:19
标题: 总结写得题供朋友共同学习计算ABCD出现次数并按出现次数由高到低输出
/*
从键盘输入一大堆字符串,统计A、B、C、D的出现次数,最后出现次数由高到低输出字母和出现次数。(C语言)
*/
#include <stdio.h>
#include <string.h>


int main()
{
    //定义字符串
    char str[100];
    printf("请输入一串字符串:\n");
    scanf("%s",str);
    // 定义四个变量用来存放ABCD出现的次数
    int a = 0;
    int b = 0;
    int c = 0;
    int d = 0;
    // 定义变量length用来存放输入字符串的长度
    unsigned long length = strlen(str);
    //for循环判断ABCD出现的次数
    for (int i = 0; i<length; i++) {
        
        // 统计A和a出现的次数
        if (str[i] == 'A' || str[i] == 'a') {
            a++;
        }
        
        // 统计B和b出现的次数
        else if (str[i] == 'B' || str[i] == 'b'){
            b++;
        }
        
        // 统计C和c出现的次数
        else if (str[i] == 'C' || str[i] == 'c'){
            c++;
        }
        
        // 统计D和d出现的次数
        else if (str[i] == 'D' || str[i] == 'd'){
            d++;
        }
    } // 定义一个数组x用来存放ABCD出现的次数
    int x[4] = {a,b,c,d};
   
    // 定义temp用于冒泡排序标记排序趟数
    int temp;
   
    // 冒泡排序  将a,b,c,d降序排序,i表示排序的趟数,j表示每趟排序的比较次数
    for (int i = 0; i<3; i++)
    {
        for(int j = 0;j<3-i;j++)
        {
            if (x[j] < x[j+1])
            {
                // 当前一个元素小于后一个元素时,交换它们的位置
                temp = x[j];
                x[j] = x[j+1];
                x[j+1] = temp;
            }
            
        }
    }
   
    // 定义一个数组y用来存放ABCD标志
    char y[4];
   
    // 将数组x与数组y的出现次数和标志一一对应
    for (int i = 0; i<4; i++)
    {
        // 如果出现a次,则y[i]='A'
        if(x[i] == a && y[0] != 'A' && y[1] != 'A' && y[2] != 'A' && y[3] != 'A')
        {
            y[i] = 'A';
        }
        // 如果出现b次,则y[i]='B'
        else if(x[i] == b && y[0] != 'B' && y[1] != 'B' && y[2] != 'B' && y[3] != 'B')
        {
            y[i] = 'B';
        }
        // 如果出现c次,则y[i]='C'
        else if(x[i] == c && y[0] != 'C' && y[1] != 'C' && y[2] != 'C' && y[3] != 'C')
        {
            y[i] = 'C';
        }
        // 如果出现d次,则y[i]='D'
        else
        {
            y[i] = 'D';
        }
    }
   
    // 降序打印输出每个字母出现的次数
    for (int i = 0; i<4; i++)
        printf("%c出现%d次\n",y[i],x[i]);
   
    return 0;
}

作者: qingying5810    时间: 2015-4-15 18:15
木有人来学习吗
作者: zeizei    时间: 2015-4-15 19:53
过了一遍,明天又忘了




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