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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

#include<stdio.h>
#include<stdlib.h>
void main()
{
        printf("请输入一个小于1024字符的字符串\n");
        char str[1024];
        scanf("%s", str);

        int i;
        int countA = 0;//A的计数初始化
        int countB = 0;//B的计数初始化
        int countC = 0;//C的计数初始化
        int countD = 0;//D的计数初始化
        for (i = 0; str[i] != '\0'; i++)//数组循环
        {
                if (str[i] == 'A')//为A,countA+1
                {
                        countA++;
                }
                else if (str[i] == 'B')//为B,countA+1
                {
                        countB++;
                }
                else if (str[i] == 'C')//为C,countA+1
                {
                        countC++;
                }
                else if (str[i] == 'D')//为D,countA+1
                {
                        countD++;
                }
        }
        int j;
         int sz[4] = { countA, countB, countC, countD };
         char c[4] = { 'A', 'B', 'C', 'D' };
         for ( j = 0; j < 3; j++)
         {
                 for (int k = 0; k < 2; k++)
                 {
                         if (sz[k] < sz[k + 1])
                         {
                                 int temp = sz[k];
                                 sz[k] = sz[k + 1];
                                 sz[k + 1] = temp;
                         }
                 }
               
         }
       
         for (j = 0; j < 4; j++)
         {
                 printf("%c个数为%d\n",c[j], sz[j]);
         }
       
        system("pause");

}

最后冒泡排序后,无法按从大到小排序,求解。。谢谢!

5 个回复

倒序浏览
粗略看了下 你只交换了出现次数没交换对应的字母
回复 使用道具 举报
晗修 发表于 2015-6-20 14:37
粗略看了下 你只交换了出现次数没交换对应的字母

那应该怎么修改呢?
回复 使用道具 举报
dushoupeng 发表于 2015-6-20 17:09
那应该怎么修改呢?

交换次数的时候顺便交换字符数组对应的字母
或者定义一个结构体 包含字母和次数
回复 使用道具 举报
  1. #import <Foundation/Foundation.h>
  2. #import <stdio.h>


  3. int main() {
  4.    


  5.     int a = 0, b = 0, c = 0, d = 0 ,i = 0;
  6.     char sentence[100] = "";
  7.     puts("请输入\n");
  8.     gets(sentence);
  9.     while (sentence[i] != '\0') {
  10.         
  11.         switch (sentence[i]) {
  12.             case 'A':
  13.                 a++;
  14.                 break;
  15.                
  16.             case 'B':
  17.                 b++;
  18.                 break;
  19.                
  20.             case 'C':
  21.                 c++;
  22.                 break;
  23.                
  24.             case 'D':
  25.                 d++;
  26.                 break;
  27.                
  28.             default:
  29.                 break;
  30.         }
  31.         i++;
  32.     }
  33.     //printf("%d%d%d%d\n",a,b,c,d);
  34.     int count[4] = {a, b, c, d};//  做排序法要用到
  35.     int k = 0;
  36.     char letter[4] = "ABCD";//  输出对应的字母要用到
  37.     int temp;
  38.     char cemp;
  39.     for (int j = 0; j<3; j++) {//  冒泡排序法
  40.         for ( k = 0; k < 3; k++) {
  41.             if (count[k] <= count[k + 1]) {//  如果小则向上(右)冒泡
  42.                
  43.                
  44.                 temp = count[k + 1];
  45.                 count[k + 1] = count[k];
  46.                 count[k] = temp;
  47.                
  48.                
  49.                 cemp = letter[k + 1];//  如果执行了冒泡,对应的字母也跟着换位置,因为abcd 对应ABCD。
  50.                 letter[k + 1] = letter[k];
  51.                 letter[k] = cemp;
  52.                 //printf("%c",letter[k]);
  53.                
  54.                           }
  55.         }
  56.         
  57.                }
  58.     for (int l = 0; l < 4; l++) {//  输出结果
  59.         printf("%c",letter[l]);
  60.         printf("%d\n",count[l]);
  61.     }
  62.        return 0;
  63. }
复制代码
回复 使用道具 举报 1 0
晗修 发表于 2015-6-20 18:49
交换次数的时候顺便交换字符数组对应的字母
或者定义一个结构体 包含字母和次数  ...

已经ok了,谢谢
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马