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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© itufo 中级黑马   /  2015-8-12 22:50  /  825 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文




从键盘输入一大堆字符串,统计A、B、C、D的出现次数,最后出现次数由高到低输出字母和出现次数。下面这段代码有个bug,当输入的字符每个字符出现次数相同时,会重复打印数次。(eg:输入ABDC,程序结果是

A出现的次数是1

B出现的次数是1

C出现的次数是1

D出现的次数是1

A出现的次数是1

B出现的次数是1

C出现的次数是1

D出现的次数是1

A出现的次数是1

B出现的次数是1

C出现的次数是1

D出现的次数是1

A出现的次数是1

B出现的次数是1

C出现的次数是1

D出现的次数是1

代码要怎么修改?

#include <stdio.h>

void CharNumSort( int s[]  ) ;

void CharNumPrint(int s[] , int x[] );

int main()

{

   

    int num[4] = {0} ; //定义统计输入字符串中abcd 数目的数组,并初始化

    int CharNumCopy[4] = {0} ;

    char ch ;

    int i = 0 ;

    printf("请输入一个字符串:\n");

    //scanf("%c",&ch);

    while( ( ch = getchar( ) ) != '\n' ) // ch 获取输入的字符

    {

        switch( ch )

        {

            case 'A' : num[0]++ ; break ;

            case 'B' : num[1]++ ; break ;

            case 'C' : num[2]++ ; break ;

            case 'D' : num[3]++ ; break ;

            default :break ;

        }

    }

   

    for(i = 0 ; i< 4 ; i++)

        CharNumCopy = num ;   //复制字符出现的个数

   

    CharNumSort( CharNumCopy ) ;  // 交换后CharNumCopy 数组是按大小排列的

   

    CharNumPrint( CharNumCopy , num ) ;

    return 0 ;

}

void CharNumSort( int s[] )

{

    int i , j ,tmp ;

   

    for(i = 0 ; i< 4; i++)

        for(j = i+1 ; j < 4 ; j++)

            if(s < s[j])

            {

                tmp = s ;

                s =s[j] ;

                s[j] =tmp        ;

            }

}

void CharNumPrint(int s[] , int x[] )

{

    int i , j  ;

    for(i = 0 ; i< 4 ; i++)

        for(j = 0 ; j< 4 ; j++)

        {

            if( s == x[j] )

                printf(" %c出现的次数是%d \n", 'A'+j , s) ;

        }

   

   

}



3 个回复

倒序浏览
当然是在循环里做个num++了,用switch的话,那就要没个字母里都要弄个不同变量++
回复 使用道具 举报
而且你这明明还是会报错的啊
回复 使用道具 举报
弄个二维数组存,二维数组中每个数组长度为2,第一个位置放字母,第二个放个数,统计完后排序就好了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马