#include <stdio.h>
#include <string.h>
// 定义一个主函数,作为程序的入口
int main()
{
// 定义一个数组str用来存放输入的字符串
char str[100];
// 提示输入一个字符串
printf("please input a string:\n");
// 接收输入的字符串,并赋值给数组str
gets(str) ;
// 定义两个变量用于for循环条件变量
int i,j;
// 定义四个变量用来存放ABCD出现的次数
int a,b,c,d;
a=b=c=d=0;
// 定义变量length用来存放输入字符串的长度
unsigned long length = strlen(str);
// 定义for循环,当i小于字符串长度时,执行循环体,i加1
for (i = 0; i<length; i++)
{
// 统计A出现的次数
if (str[i] == 'A')
{
a++;
}
// 统计B出现的次数
else if (str[i] == 'B')
{
b++;
}
// 统计C出现的次数
else if (str[i] == 'C')
{
c++;
}
// 统计D出现的次数
else if (str[i] == 'D')
{
d++;
}
}
// 定义一个数组sort用来存放ABCD出现的次数
int sort[] = {a,b,c,d};
// 定义temp用于冒泡排序标记排序趟数
int temp;
// 冒泡排序 将a,b,c,d降序排序,i表示排序的趟数,j表示每趟排序的比较次数
for (i = 0; i<4; i++)
for(j = i+1;j<4;j++)
if (sort[i] < sort[j])
{
// 当前一个元素小于后一个元素时,交换它们的位置
temp = sort[i];
sort[i] = sort[j];
sort[j] = temp;
}
// 遍历排序数组
for (i = 0; i<4; i++)
{
// 如果出现a次,则打印A出现的次数
if(sort[i] == a )
{
printf("A出现%d次\n",a);
}
// 如果出现b次,则打印B出现的次数
else if(sort[i] == b)
{
printf("B出现%d次\n",b);
}
// 如果出现c次,则打印C出现的次数
else if(sort[i] == c)
{
printf("C出现%d次\n",c);
}
// 如果出现d次,则打印D出现的次数
else if(sort[i] == d)
{
printf("D出现%d次\n",d);
}
}
}
仔细琢磨了下,模块化比较简单,难点在于理解将次数和字符结合起来,排序完成后继续使用一次循环打印出与之对应的字符即可。 |