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