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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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

int main()
{
    //提示用户输入一段字符串
    printf("请输入一大堆字符串:\n");
   
    //定义一个数组,存放用户输入的字符串
    char c[100];
   
    //接收用户输入的字符换,并赋值给数组
    scanf("%s",c );
   
    //定义4个变量,分别统计A,B,C,D的出现次数
    int countA=0,countB=0,countC=0,countD=0;
   
    //定义一个变量保存用户所输入的字符串的长度
    int length = strlen(c );
    //for循环进行判断,符合条件给各自加1
    for (int i=0; i<length; i++)
    {
        if (c=='A') {
            countA++;
        }
        else if(c=='B')
        {
            countB++;
        }
        else if(c=='C')
        {
            countC++;
        }
        else if(c=='D')
        {
            countD++;
        }
    }
    //定义一个数组存放统计好的A,B,C,D的次数
    int array[4]={countA,countB,countC,countD };
    //利用冒泡法对A,B,C,D进行排序
    for(int i=0;i<4;i++)
    {
        for (int j=0;j<3-i ;j++)
        {
            if (array[j]<array[j+1])
            {
                //当前元素小于后一个元素,就交换他们的位置
                int temp=array[j];
                array[j]=array[j+1];
                array[j+1]=temp;
            }
        }
    }
    //定义一个数组,存放A,B,C,D的
    char letter[4];
    //将array和letter数组的出现的次数和字母一一对应
    for (int i=0; i<4; i++)
    {
       if (array==countA && letter[0]!='A'&& letter[1]!='A'&&letter[2]!='A'&&letter[3]!='A') {
            letter
='A';//if条件里面为什么要加
letter[0]!='A'&& letter[1]!='A'&&letter[2]!='A'&&letter[3]!='A'这样判断不会使数组lettle里面不会存放ABCD了吗?那是不是 就矛盾了呀 ,怎麽想都想不通      
          }
        else if(array
==countB && letter[0]!='B'&& letter[1]!='B'&&letter[2]!='B'&&letter[3]!='B'){
            letter
='B';
        }
        else if(array
==countC && letter[0]!='C'&& letter[1]!='C'&&letter[2]!='C'&&letter[3]!='C'){
            letter
='C';
        }
        else
        {
            letter[i ]='D';
        }
    }
    //降序打印输出每个字母出现的次数
    for(int i=0;i<4;i++)
    {
        printf("%c出现%d次\n",letter,array);
    }

    return 0;
}

4 个回复

倒序浏览
比如,如果输入的ABCD 次数是一样多的 不加限定的话array[i] == countA总成立 最后letter[4]= {'A', 'A', 'A', 'A'};
这个限定只要找到过'A' 以后在遇到就算数值相同条件也不成立了。
我想的办法是设个标记char A = 1, B = 1, C = 1; if (array[i] == countA && A) { letter[i] = 'A'; A = 0;}这样 稍微简练点
这是基础测试题吧
回复 使用道具 举报
从今以后 发表于 2014-12-9 00:44
比如,如果输入的ABCD 次数是一样多的 不加限定的话array == countA总成立 最后letter[4]= {'A', 'A', 'A', ...

可不可以把你的方法在说自习一点??
回复 使用道具 举报
CrazyMan 发表于 2014-12-9 22:39
可不可以把你的方法在说自习一点??

char A = 1, B = 1, C = 1;
if (array == countA && A)
{
    letter = 'A';
    A = 0;
}
就是类似这样的,一旦找到和A匹配的,就把标记 A = 0; 这样即使字母数相同 第一次匹配到A = 0 if条件是不成立的 也就保证了每个字母只匹配一次 这主要是针对ABCD次数相同这类特殊情况的。
回复 使用道具 举报
从今以后 发表于 2014-12-10 12:16
char A = 1, B = 1, C = 1;
if (array == countA && A)
{

恩恩,有点懂了,三克油:P
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马