7、 从键盘输入一大堆字符串,统计A、B、C、D的出现次数,最后出现次数由高到低输出字母和出现次数。(C语言)
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[]) {
//定义一个数组,存放字符串
char array[100];
printf("请输入一行字符串:");
scanf("%s",array);
//存放A、B、C、D出现的次数
int a = 0;
int b = 0;
int c = 0;
int d = 0;
//字符串长度
unsigned long size = strlen(array);
//for循环的循环变量
int i;
//i小于字符串的长度,执行一次循环体,i+1
for (int i = 0;i<size;i++)
{
//统计'A'出现的次数
if (array[i] == 'A')
{
a++;
}
else if (array[i] == 'B')
{
b++;
}
else if (array[i] == 'C')
{
c++;
}
else if (array[i] == 'D')
{
d++;
}
}
//存放ABCD出现的次数
int m[4] = {a,b,c,d};
//定义中间变量,交换元素位置
int temp;
for (int i = 0;i<3;i++)
{
int j;
for (int j = 0;j<3-i;j++)
{
if (m[j]<m[j+1])
{
//前一个元素小于后一个元素时,交换位置
temp = m[j];
m[j] = m[j+1];
m[j+1] = temp;
}
}
}
//存放ABCD出现的次数对应的ABCD字符
char n[4];
for (int i = 0;i<4;i++)
{
//如果出现a次,n[i]='A'
if (m[i] == a && n[0] != 'A' && n[1] != 'A' && n[2] != 'A' && n[3] != 'A')
{
n[i] = 'A';
}
//如果出现b次,n[i]='B'
else if (m[i] == b && n[0] != 'B' && n[1] != 'B' && n[2] != 'B' && n[3] != 'B')
{
n[i] = 'B';
}
//如果出现c次,n[i]='C'
else if (m[i] == c && n[0] != 'C' && n[1] != 'C' && n[2] != 'C' && n[3] != 'C')
{
n[i] = 'C';
}
//如果出现d次,n[i]='D'
else
{
n[i] = 'D';
}
}
//降序打印输出每个字母的出现次数
for (i = 0; i<4; i++)
printf("%c出现%d次\n",n[i],m[i]);
return 0;
}
这道题是我在基础测试时遇到的,前面有点思路的,但还是在网上找了找,学习学习,借鉴一下。基本都能读明白,唯一有点不明白的就是出现次数的for循环,条件中那么多&&,有点搞不明这个条件有何作用。有没有学长指点下!感激不尽! |
|