我们可以标记三个变量用来标记打印或者未打印。
// 从键盘输入一大堆字符串,统计A、B、C、D的出现次数,最后出现次数由高到低输出字母和出现次数。
#include <stdio.h>
#include <string.h>
int main()
{
//定义一个字符串
char array[100];
//提示输入字符串
printf("请输入一串字符串:\n");
scanf("%s",array);
//printf("刚刚输入的字符串是:%s\n",array);
//申明要调用的函数
void count(char [100]);
//将输入的字符串作为形参,调用count函数进行运算。
count(array);
return 0;
}
void count(char array[100])
{
int a = 0;//用a来记录A出现的次数
int b = 0;//用b来记录B出现的次数
int c = 0;//用c来记录C出现的次数
int d = 0;//用d来记录D出现的次数
unsigned long length = strlen(array);
int i,j,temp;
for (i = 0; i<length; i++)
{
if (array[i] == 'A') {//统计A出现的次数
a++;
}
else if (array[i] == 'B'){//统计B出现的次数
b++;
}
else if (array[i] == 'C'){//统计C出现的次数
c++;
}
else if (array[i] == 'D'){//统计D出现的次数
d++;
}
}
//printf("A出现了%d次\tB出现了%d次\tC出现了%d次\tD出现了%d次\n",a,b,c,d);
int x[4] = {a,b,c,d};//定义一个数组存放次数
//用冒泡法给这个数组里面的次数按照从大到小的顺序排序
for (i = 0; i<3; i++)//排序的趟数
{
for(j = 0;j<3-i;j++)//每趟比较次数
{
if (x[j] < x[j+1])//如果前一个数比后一个数要小,则借助第三方变量temp交换位置
{
temp = x[j];
x[j] = x[j+1];
x[j+1] = temp;
}
}
}
//为了防止出现次数相同重复打印的情况给打印的语句做一个标记0代表未打印,1代表已打印
int a1=0;
int b1=0;
int c1=0;
for(i=0;i<4;i++){
if(x[i]==a && a1==0){//当a=b=c=d,如果没有打印标记,那么将重复打印第一条语句
a1++;//打印标记
printf("A出现了%d次\n",x[i]);
}
else if(x[i]==b && b1==0){
b1++;//打印标记
printf("B出现了%d次\n",x[i]);
}
else if(x[i]==c && c1==0){
c1++;//打印标记
printf("C出现了%d次\n",x[i]);
}else printf("D出现了%d次\n",x[i]);//在if最后一个判断条件,所以不需标记。
}
}
|