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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 dawn.dai 于 2014-4-26 21:28 编辑

#include "stdio.h"


void letterCount(char *string);

int main(int argc, const char * argv[])
{
    char s[200] ;
   
    printf("输入字符串:");
   
    scanf("%s",s);
   
    letterCount(s);
   
    return 0;
}

void letterCount(char *string ){

    int A=0;
    int B=0;
    int C=0;
    int D=0;
    int *p;
    int *r;
    for (int i=0; i<strlen(string); i++) {
        char c =string;
        if (c=='A'){
            A++;      //3
        
        }else if(c=='B'){
        
            B++;     //1
        }else if(c=='C'){
        
            C++;      //2
        }else if(c=='D'){
        
            D++;     //4
        }
        
    }
   
    int arry[4][2]={{'A',A},{'B',B},{'C',C},{'D',D}};
   
    for (int j=0; j<4; j++) {
        for (int k=j+1; k<4; k++) {
            if (arry[j][1]<arry[k][1]) {
               
                int t =arry[j][1];
                arry[j][1]=arry[k][1];
                arry[k][1]=t;
               
                int m =arry[j][0];
                arry[j][0]=arry[k][0];
                arry[k][0]=m;

               
            }
        }
    }
        printf("ABCD出现次数由高到低分别是:\n");
   
      
  for (int n=0; n<4; n++) {
            p =&arry[n][0];
            r =&arry[n][1];
            printf("%c %d\n",*p,*r);

        }
   
}

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

3 个回复

倒序浏览

#include<stdio.h>
#include<string.h>

int main()
{
    printf("请输入字符串(长度小于1000个字符),以回车结束\n");
    char m[1000];
    gets(m);
    int a = 0;
    int b = 0;
    int c = 0;
    int d = 0;
    unsigned long lenght = strlen(m);
    for(int i = 0; i < lenght; i++)
    {
        switch(m[i])
        {
            case 'A':
            a++;
            break;
            case 'B':
            b++;
            break;
            case 'C':
            c++;
            break;
            case 'D':
            d++;
            break;
        }
    }

    int n[4] = {a,b,c,d};

    char array[4] = {'A','B','C','D'};
   
    for(int i = 0; i < 3; i++)
        for(int j = i+1; j < 4; j++)
        {
            if(n[i]<n[j])
            {
                char temp = array[i];
                array[i] = array[j];
                array[j] = temp;
               
                int temp1 = n[i];
                n[i] = n[j];
                n[j] = temp1;
            }
        }
    for(int i = 0; i < 4; i++)
      printf("%c的出现次数为%d\n", array[i], n[i]);
   
    return 0;
}
回复 使用道具 举报 1 0
我发表我的代码给你参考一下。 个人感觉程序最主要的还是运行时占用内存的大小,以及算法的速度,还有可读性。我的代码比较啰嗦,但是加了注释。也不见得省内存或比你的精简,你可以看看,增加一种思路。
  1. //
  2. //  main.c
  3. //  测试题8
  4. /*从键盘输入一大堆字符串,统计A、B、C、D的出现次数,最后出现次数由高到低输出字母和出现次数。(C语言)*/


  5. #include <stdio.h>//引用调用printf的头文件
  6. struct appear{
  7.     char c;
  8.     int count;
  9.              };//自定义一个结构体,方便存放四个字母和出现的次数

  10. void letter_print(struct appear ptr[]);//声明输出函数
  11. void arrange(struct appear ptr[]);//声明排序函数


  12. int main()
  13. {
  14.     struct appear countA,countB,countC,countD,arr[4];//定义结构体变量,执行下面的初始化
  15.     countA.c='A';
  16.     countA.count=0;
  17.     countB.c='B';
  18.     countB.count=0;
  19.     countC.c='C';
  20.     countC.count=0;
  21.     countD.c='D';
  22.     countD.count=0;
  23.     char str[20];//定义用来存放查询的字符串
  24.     printf("请输入你想查询的字符串:\n");
  25.     scanf("%s",str);
  26.     for(int n=0;str[n]!='\0';++n)//遍历读取到的每个字符,直到遇到\0
  27.     switch(str[n])
  28.     {   //遇到这四个字母,分别计数
  29.         case 'A':++countA.count;break;
  30.         case 'B':++countB.count;break;
  31.         case 'C':++countC.count;break;
  32.         case 'D':++countD.count;break;
  33.     }
  34.     arr[0]=countA;
  35.     arr[1]=countB;
  36.     arr[2]=countC;
  37.     arr[3]=countD;//将统计结果添加到自定义结构体的数组中
  38.     arrange(arr);//比较统计结果的大小,并交换再数组中的排列位置,方便输出
  39.     letter_print(arr);//输出排列好的字符和统计结果
  40.     return 0;
  41. }

  42. void arrange(struct appear ptr[])
  43. {
  44.     struct appear temp;//定义用来存放自定义的结构体类型的中间变量,用来交换位置
  45.     for(int i=1;i<4;++i)//冒泡排序法来比较大小,并降序排列数组中的顺序
  46.         for(int j=0;j<4-i;++j)
  47.             if(ptr[j].count<ptr[j+1].count)
  48.             {
  49.                 temp=ptr[j];
  50.                 ptr[j]=ptr[j+1];
  51.                 ptr[j+1]=temp;
  52.             }
  53. }

  54. void letter_print(struct appear ptr[])
  55. {
  56.     printf("以下是各个字母及其出现的次数:\n");
  57.     for(int i=0;i<4;++i)
  58.         printf("%c出现的次数是:%d\n",ptr[i].c,ptr[i].count);
  59. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
jing迪 + 1

查看全部评分

回复 使用道具 举报 1 0
楼上的比较简单
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马