5、 从键盘输入一大堆字符串,统计A、B、C、D的出现次数,最后出现次数由高到低输出字母和出现次数。(C语言)
思路分析
1.获取字符串
2.声明4个变量a,b,c,d分别存储‘A’,’B‘,‘C’,‘D‘出现的次数
3.从第一个字符开始遍历字符串,如果当前字符是A或B或C或D,就将对应的变量加1
4.将a,b,c,d存于int类型数组中由大到小排序
5.虽然abcd进行了排序但是值并没有改变,所以遍历int类型数组,如果第一个位置值于a相等即可输出A,于b相等可输出B,以此类推
#include <studio.h>
void PrintStr(char *s);//定义方法
int main ()
{
//定义字符串
char * str;
//接收字符串,并赋值
scanf("%s",str);
//调用方法,输出
PrintStr(str);
return 0;
}
//声明方法
void PrintStr(char *s)
{
int i=0;//i表示字符串第i处的位置
int a=0;//a表示'A'出现的次数
int b=0;//b表示'B'出现的次数
int c=0;//c表示'C'出现的次数
int d=0;//d表示'D'出现的次数
while(s[i]!='\0')//字符串的结束标志就是\0,如果遇到\0表示字符串遍历结束
{
//如果第i处的字符为A,则a加1
if(s[i]=='A')
{
a++;
}
//如果第i处的字符为B,则b加1
else if(s[i]=='B')
{
b++;
}
//如果第i处的字符为C,则c加1
else if(s[i]=='C')
{
c++;
}
//如果第i处的字符为D,则d加1
else if(s[i]=='D')
{
d++;
}
}
//将a,b,c,d存于数组中
int arry[4]={a,b,c,d};
int temp=0;
//外层循环,表示当前的位置
for(int j=0;j<4;j++)
{
//内层循环,将当前位置的值与其后面的所有值分别比较大小
for(int k=j+1;k<4-j;k++)
{
//如果后面的值比前面的值大,那么就将两个值交换位置
if(arry[k]>arry[j])
{
temp=arry[j];//先记录arry[j]的值
arry[j]=arry[k];//在对arry[j]赋值arry[k]
//因为arry[j]的先前值已经保存在temp中,并且arry[j]的值已经变为//arry[k]
//所以arry[k]不能再等于arry[j]而是等于temp
arry[k]=temp;
}
}
}
//遍历数组对应 a b c d,输出相应值
for(int j=0;j<4;j++)
{
//如果arry[i]值为a,则输出A
if(arry[i]==a)
{
printf("a chu xian le%dci\n",arry[i]);
}
//如果arry[i]值为b,则输出B
else if (arry[i]==b)
{
printf("b chu xian le%dci\n",arry[i]);
}
//如果arry[i]值为c,则输出C
else if (arry[i]==c)
{
printf("c chu xian le%dci\n",arry[i]);
}
//如果arry[i]值为d,则输出D
else if (arry[i]==d)
{
printf("d chu xian le%dci\n",arry[i]);
}
}
}
|
|