黑马程序员技术交流社区

标题: 基础测试题 A B C D出现的次数及次数排序 这道题我的答案如下,希望对大家有帮助 [打印本页]

作者: 大白天    时间: 2015-2-3 02:08
标题: 基础测试题 A B C D出现的次数及次数排序 这道题我的答案如下,希望对大家有帮助
/*从键盘输入一大堆字符串,统计A、B、C、D的出现次数,最后出现次数由高到低输出字母和出现次数。*/

#include <stdio.h>
void count(char*p,int a[]);//用来统计字符串里ABCD字符的个数,放入字符
void sort(int a[]); // 将个数在数组里按从大到小排序
int main()
{
  int a[4];
  char *s;
  scanf("%s",s)
  count(s,a);
  int b[4]=a[4];
  sort(b);
for(int i=0;i<4;i++)
{
     if(b[i]==a[0])
     printf("A:%d\n",b[i]);
  else if(b[i]==a[1])
     printf("B:%d\n",b[i]);
  else if(b[i]==a[2])
     printf("C:%d\n",b[i]);
  else if(b[i]==a[3])
     printf("D:%d\n",b[i]);

} // 按要求打印
return 0;
}

void count(char*p,int a[])
{
   whlile((*p)!='\0')
{
   if(s=='A')
     a[0]++;
   else if(s=='B')
    a[1]++;
   else if(s=='C')
    a[2]++;
   else if(s=='D')
    a[3]++;
}
}
void sort(int a[])
{
  int i,j,t;
  for(j=0;j<4;j++)
{
    for(i=0;i<4-1-j;i++)
    if(a[i]>a[i+1])
    {
        t=a[i];
        a[i]=a[i+1];
        a[i+1]=t;
    }
  }
}
作者: MacxChina    时间: 2015-2-3 13:41
继续加油
作者: 大白天    时间: 2015-2-3 15:47
                                                                 共勉
作者: 备战黑马五期    时间: 2015-2-3 17:42
加油,还可以用冒泡排序的方法来做
作者: lumingfu    时间: 2015-2-3 17:45
先点个赞吧
作者: 大白天    时间: 2015-2-3 22:29
备战黑马五期 发表于 2015-2-3 17:42
加油,还可以用冒泡排序的方法来做

恩恩 是的 当时忘记这个算法了就没查资料
作者: 大白天    时间: 2015-2-3 22:30
备战黑马五期 发表于 2015-2-3 17:42
加油,还可以用冒泡排序的方法来做

是的 当时忘记这个算法咋写的了 没有查资料
作者: 类自通    时间: 2015-2-3 22:35
看你这么不容易,帮你顶下。
作者: cruzer    时间: 2015-2-3 22:39
{:3_49:} 类似这种情况 建议 使用switch 。。。。
作者: cruzer    时间: 2015-2-3 22:42
我是这样做的。。。。
代码:

#include "stdio.h"
int main(int argc, const char * argv[]) {
    //保存输入信息
    char inputbuffer[1000];
    //获取控制台输入
    printf("请输入字符串。。回车确认");
    scanf("%s",inputbuffer);   
    int Counter_A=0,Counter_B=0,Counter_C=0,Counter_D=0;
    int i=0;//循环变量
    while (inputbuffer!='\0') {
        
        switch (inputbuffer) {
            case 'A':
                Counter_A++;
                break;
            case 'B':
                Counter_B++;
                break;
            case 'C':
                Counter_C++;
                break;
            case 'D':
                Counter_D++;
                break;
            default:
                break;
        }
        
        i++;//循环变量自增
    }
   
   
    //定义两个数组 用来表示 字符标识与统计结果
    char tagarray[4] ={'A','B','C','D'};
    int counterarray[4] ={Counter_A,Counter_B,Counter_C,Counter_D};
   
    //排序部分
    for (int j = 0; j<3; j++)
    {
        for(int k = 0;k<3-j;k++)
        {
            if (counterarray[k] < counterarray[k+1])
            {
                // 当前一个元素小于后一个元素时,交换它们的位置
                int temp = counterarray[k];
                char tempchar=tagarray[k];
                counterarray[k] = counterarray[k+1];
                tagarray[k]=tagarray[k+1];
                counterarray[k+1] = temp;
                tagarray[k+1]=tempchar;
            }
        }
    }
    //输出部分
    int l=0;
    while (l<4) {
        printf("%c出现了%d个\n",tagarray[l],counterarray[l]);
        l++;
    }
    return 0;
}


作者: synhm    时间: 2015-2-3 22:49
我很笨不会做。。。
作者: 1026238004    时间: 2015-2-3 23:03
普遍都是这个思路




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