- //输入字符串,统计A、B、C、D出现次数,由高到低输出字母和次数
- #include <stdio.h>
- int main(int argc, const char * argv[]) {
- //定义变量A,B,C,D分别用于统计A,B,C,D出现的次数
- int A,B,C,D;
- //定义字符数组保存输入的字符串
- char str[1000];
- //提示
- printf("请输入字符串:");
- //输入字符串保存到str[1000]字符数组中
- scanf("%s",str);
- //分析输入的字符,统计ABCD出现的次数
- for (int i=0; i<sizeof(str)&&str[i]!='\0'; i++) {
- switch (str[i]) {
- case 'A':
- A++;
- break;
- case 'B':
- B++;
- break;
- case 'C':
- C++;
- break;
- case 'D':
- D++;
- break;
- default:
- break;
- }
- }
- //把A,B,C,D的值保存到数组num【4】中
- int num[4]={A,B,C,D};
- //定义一个字符数组用于保存ABCD字符
- char abcd[4]={'A','B','C','D'};
- //将num数组中的值由大到小排序,冒泡排序法
- for (int i=0; i<sizeof(num)/sizeof(int)-1; i++) {
- for (int j=0; j<sizeof(num)/sizeof(int)-i-1; j++) {
- //如果前一个数小于后一个数,则互换
- if (num[j]<num[j+1]) {
- int temp;
- temp=num[j];
- num[j]=num[j+1];
- num[j+1]=temp;
- //如果num[4]中数字顺序发生变化,则abcd[4]中字母顺序也对应发生变化,和数字对应
- char temp1;
- temp1=abcd[j];
- abcd[j]=abcd[j+1];
- abcd[j+1]=temp1;
- }
- }
- }
- //由于num[4]数组和abcd[4]数组一一对应,则循环将A,B,C,D排序输出即可
- for (int i=0; i<sizeof(num)/sizeof(int); i++) {
- printf("%c出现的次数为:%d\n",abcd[i],num[i]);
- }
- return 0;
- }
复制代码
我试着实现了一下,统计出现次数,排序都很简单,最难的是要将ABCD和出现次数对应输出,这一点确实难着我了,想了半天才想起来对应排序这个方法 |