从键盘输入一大堆字符串,统计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) ;
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |