黑马程序员技术交流社区

标题: 一道c语言题目(ios基础测试) [打印本页]

作者: itufo    时间: 2015-8-12 22:50
标题: 一道c语言题目(ios基础测试)



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

        }

   

   

}




作者: songynnm    时间: 2015-8-15 10:44
当然是在循环里做个num++了,用switch的话,那就要没个字母里都要弄个不同变量++
作者: songynnm    时间: 2015-8-15 10:45
而且你这明明还是会报错的啊
作者: wowthe1st    时间: 2015-8-15 11:15
弄个二维数组存,二维数组中每个数组长度为2,第一个位置放字母,第二个放个数,统计完后排序就好了




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