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

/*从键盘输入一大堆字符串,统计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;
    }
  }
}

11 个回复

倒序浏览
继续加油
回复 使用道具 举报
                                                                 共勉
回复 使用道具 举报
加油,还可以用冒泡排序的方法来做
回复 使用道具 举报
lumingfu 来自手机 中级黑马 2015-2-3 17:45:18
报纸
先点个赞吧
回复 使用道具 举报
备战黑马五期 发表于 2015-2-3 17:42
加油,还可以用冒泡排序的方法来做

恩恩 是的 当时忘记这个算法了就没查资料
回复 使用道具 举报
备战黑马五期 发表于 2015-2-3 17:42
加油,还可以用冒泡排序的方法来做

是的 当时忘记这个算法咋写的了 没有查资料
回复 使用道具 举报
看你这么不容易,帮你顶下。
回复 使用道具 举报
{:3_49:} 类似这种情况 建议 使用switch 。。。。
回复 使用道具 举报
我是这样做的。。。。
代码:

#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;
}

回复 使用道具 举报
我很笨不会做。。。
回复 使用道具 举报
1026238004 来自手机 中级黑马 2015-2-3 23:03:21
12#
普遍都是这个思路
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马