//这道题是8.1(结构体)中我唯一一道一次过的题目,但写的时候思路有些转变,故中间有不少注释,都可以看成草稿,还有一些大家如果没看懂,应该也是我忘记注释掉的
//有用的我会在后面或者后面注释出来
AC代码:
#include<iostream>
#include<iomanip>
#include<string.h>
#include <ctype.h>
using namespace std;
void trans(char a[], int len)//有用,将输入的字符串中小写字母转化为大写
{
for (int i = 0; i < len; i++)
{
if (a[i] >= 'a'&&a[i] <= 'z')
{
a[i] = a[i] % 32 + 64;
}
}
}
void Rank(char a[],int len)//没啥用,之前的题目摆在这的
{
for (int i = 1; i < len; i++)
{
for (int j = 0; j <len-i; j++)
{
if (a[j]> a[j + 1])
{
char temp = a[j + 1];
a[j + 1] = a[j];
a[j] = temp;
}
}
}
};
int count(char a[], int len, char k)//k为即将计数的字符,有用,来计数的
{
int cnt = 0;
for (int i = 0; i < len; i++)
{
if (a[i] == k)
{
cnt++;
}
}
return(cnt);
}
int main()
{
char a[120];
while (gets(a))
{ // 测试
/*int len = strlen(a);
trans(a, len);
Rank(a, len);
for (int i = 0; i < len; i++)
{
cout << a[i];
}*/
/* if ( m== 0)
{
continue;
}
else
{
cout << x << " " << m << endl;
}*/
int len = strlen(a);
trans(a, len);
int max = -1;
for (char x = 'A'; x <= 'Z'; x++)
{
int m = count(a, len, x);
if (m > max)
{
max = m;
}
}//先把最多的次数找出来,我觉得可以优化之后的流程
int k = max;
for (k; k > 0; k--)//这个排序我好想用excel啊!!!设定先看啥后看啥
//后来我想,不就可以用两层循环嘛
//外层控制次数,即保证排序的最高权重为次数
{
for (char x = 'A'; x <= 'Z'; x++)//内层决定排序的第二权重
//这样的话,就保证了次数相同的时候,先输出小的字母
{
int m = count(a, len, x);
if ( m== k)
{
cout << x << " " <<m << endl;
}
}
}
cout << endl;
}
//system("pause");
return 0;
}