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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

#include <stdio.h>
#include <string.h>
// 定义一个主函数,作为程序的入口
int main()
{
    // 定义一个数组str用来存放输入的字符串
   
    char str[100];
   
    // 提示输入一个字符串
   
    printf("please input a string:\n");
   
    // 接收输入的字符串,并赋值给数组str
   
   gets(str) ;
   
    // 定义两个变量用于for循环条件变量
   
    int i,j;
   
    // 定义四个变量用来存放ABCD出现的次数
    int a = 0;
    int b = 0;
    int c = 0;
    int d = 0;
   
    // 定义变量length用来存放输入字符串的长度
    unsigned long length = strlen(str);
   
    // 定义for循环,当i小于字符串长度时,执行循环体,i加1
    for (i = 0; i<length; i++)
        {
        
        // 统计A出现的次数
        if (str[i] == 'A')
                {
            a++;
        }
        
        // 统计B出现的次数
        else if (str[i] == 'B')
                {
            b++;
        }
        
        // 统计C出现的次数
        else if (str[i] == 'C')
                {
            c++;
        }
        
        // 统计D出现的次数
        else if (str[i] == 'D')
                {
            d++;
        }
       

    }
   
    // 定义一个数组sort用来存放ABCD出现的次数
    int sort[] = {a,b,c,d};
   
    // 定义temp用于冒泡排序标记排序趟数
    int temp;
   
    // 冒泡排序  将a,b,c,d降序排序,i表示排序的趟数,j表示每趟排序的比较次数
    for (i = 0; i<4; i++)
   
    for(j = i+1;j<4;j++)
        
            if (sort[i] < sort[j])
            {
                // 当前一个元素小于后一个元素时,交换它们的位置
                temp = sort[i];
                sort[i] = sort[j];
                sort[j] = temp;
            }

   
   
    // 遍历排序数组
    for (i = 0; i<4; i++)
    {
        // 如果出现a次,则打印A出现的次数
        if(sort[i] == a )
        {
              printf("A出现%d次\n",a);
        }
        // 如果出现b次,则打印B出现的次数
      
        else if(sort[i] == b)
        {
              printf("B出现%d次\n",b);
        }
        // 如果出现c次,则打印C出现的次数
        
        else if(sort[i] == c)
        {
             printf("C出现%d次\n",c);
        }
        // 如果出现d次,则打印D出现的次数
        else if(sort[i] == d)
                {
      
                        printf("D出现%d次\n",d);
                }
       

        
    }
   
  
      
   
   
}

13 个回复

倒序浏览
不错不错
回复 使用道具 举报
  1. #include <stdio.h>

  2. //定义一个字母计数器结构体,一个放字母,一个计数
  3. typedef struct {
  4.     char letter;//存放字母A或B或C或D
  5.     int count;//字母A或B或C或D的统计个数
  6. }letterCounter;

  7. int main(int argc, const char * argv[]) {

  8. //    定义一个字母计数器数组,分别为ABCD的计数器,初始计数为0
  9.     letterCounter counters[]={{'A',0},{'B',0},{'C',0},{'D',0}};
  10.    
  11. //  输入字符串,并统计个数
  12.     printf("请输入一串字符:\n");
  13.     char temp = getchar();
  14.     while (temp != '\n') {
  15.         switch (temp) {
  16.             case 'A':
  17.                 counters[0].count ++;
  18.                 break;
  19.             case 'B':
  20.                 counters[1].count ++;
  21.                 break;
  22.             case 'C':
  23.                 counters[2].count ++;
  24.                 break;
  25.             case 'D':
  26.                 counters[3].count ++;
  27.                 break;
  28.             default:
  29.                 break;
  30.         }
  31.         temp = getchar();
  32.     }
  33.    
  34.     //根据字母计数器中count成员变量的大小对字母计数器数组排序
  35.     for (int i = 0; i < 4; i++) {
  36.         for (int j = i; j < 4; j++) {
  37.             if (counters[i].count < counters[j].count) {
  38.                 letterCounter temp;
  39.                 temp = counters[i];
  40.                 counters[i] = counters[j];
  41.                 counters[j] = temp;
  42.             }
  43.         }
  44.     }
  45.    
  46. //    按顺序输出字母计数器数组中的字母和计数
  47.     for (int i = 0; i < 4; i++) {
  48.         printf("%c = %d\n",counters[i].letter,counters[i].count);
  49.     }
  50.    
  51.     return 0;
  52. }
复制代码

点评

利用switch语句来写也可以,不同的方法,举一反山,  发表于 2015-8-17 10:02
回复 使用道具 举报

多多学习交流哈
回复 使用道具 举报
加油非常顶
回复 使用道具 举报
瞅瞅看看
回复 使用道具 举报
cube川 中级黑马 2015-11-11 18:23:08
7#
冒泡排序咩
回复 使用道具 举报
  1. #include <stdio.h>
  2. #include <string.h>
  3. int main(int argc, const char * argv[]) {
  4.     char str[1000] ;
  5.     char *p = str;
  6.     int a =0,b=0,c=0,d=0;
  7.     printf("请输出字符串\n");
  8.     gets(str);
  9.     for (p=str; p<&str[strlen(str)]; p++) {
  10.         printf("%c\t",*p);
  11.         switch (*p) {
  12.            
  13.             case 'A':
  14.                 a++;
  15.                 break;
  16.         
  17.                 case 'B':
  18.                 b++;
  19.                 break;
  20.          
  21.             case 'C':
  22.                 c++;
  23.                 break;
  24.            
  25.             case 'D':
  26.                 d++;
  27.                 break;

  28.         }
  29.     }
  30.     printf("\n");
  31.     printf("%d,%d,%d,%d\n",a,b,c,d);
  32.     return 0;
  33. }
复制代码
回复 使用道具 举报
经典的题,重点很多
回复 使用道具 举报
加油,非常顶
回复 使用道具 举报
嘿嘿嘿,我是来取经的
回复 使用道具 举报
不错不错
回复 使用道具 举报
可以定义一个字符数组保存ABCD,出现次数比较交换位置之后,对应的字母也交换。这样是不是代码简单一些。?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马