编写程序统计从键盘输入的一行文本中各个字母的个数。 输入以回车键结束。 不区分大小写,大写字母与相应的小写字母按照同一个字母看待。 要求输出按照各个字母出现的个数从大到小进行排序,出现的个数相同的,按

简介: 编写程序统计从键盘输入的一行文本中各个字母的个数。 输入以回车键结束。 不区分大小写,大写字母与相应的小写字母按照同一个字母看待。 要求输出按照各个字母出现的个数从大到小进行排序,出现的个数相同的,按

编写程序统计从键盘输入的一行文本中各个字母的个数。


输入以回车键结束。


不区分大小写,大写字母与相应的小写字母按照同一个字母看待。


要求输出按照各个字母出现的个数从大到小进行排序,出现的个数相同的,按照字母在字母表中的先后顺序进行排序。


***输入格式:调用getchar()函数依次输入每个字符

***输出格式:"%c(%c):%d\n"


例如输入以下文本:


Hello World


程序将输出:


L(l):3

O(o):2

D(d):1

E(e):1

H(h):1

R( r):1

W(w):1

A(a):0

B(b):0

C( c):0

F(f):0

G(g):0

I(i):0

J(j):0

K(k):0

M(m):0

N(n):0

P( p):0

Q(q):0

S(s):0

T(t):0

U(u):0

V(v):0

X(x):0

Y(y):0

Z(z):0


#include <stdio.h>
#include <stdlib.h>
struct alpha{               
char c;
int count;
};
void quicksort(struct alpha *v[], int left, int right);
int main()
{               
    struct alpha *x[26];
    int i;
    for (i = 0; i < 26; i ++) {               
        x[i] = (struct alpha *)malloc(sizeof(struct alpha));
        x[i]->c = 'A' + i;
        x[i]->count = 0;
    }
    char c;
    while((c = getchar()) != '\n') {                
        if (c >= 'a' && c <= 'z')
            c = c - 'a' + 'A';
        if (c >= 'A' && c <= 'Z')
            x[c - 'A']->count ++;
    }
    quicksort(x, 0, 25);
    for (i = 0; i < 26; i ++)
        printf("%c(%c):%d\n", x[i]->c, 'a' + x[i]->c - 'A', x[i]->count);
    return 0;
}               
int compare(struct alpha *x1, struct alpha *x2) {               
    if (x1->count > x2->count)
        return 1;
    else if (x1->count < x2->count)
        return -1;
    else if (x1->c < x2->c)
        return 1;
    else if (x1->c > x2->c)
        return -1;
    else
        return 0;
}               
void swap(struct alpha *v[], int i, int j)
{               
    struct alpha *temp;
    temp = v[i];
    v[i] = v[j];
    v[j] = temp;
}               
void quicksort(struct alpha *v[], int left, int right)
{               
    if (left >= right)
        return;
    int last = left;
    int i;
    for ( i = left + 1; i <= right; i ++)
        if(compare(v[i],v[left]) > 0) {               
            last ++;
            swap(v, last, i);
        }
    swap(v, left, last);
    quicksort(v,left, last - 1);
    quicksort(v, last + 1, right);
}
相关文章
|
人工智能 缓存 Linux
Confluence PDF导出中文支持
Confluence PDF导出中文支持
|
传感器 算法
【STM32】I2C练习,HAL库读取MPU6050角度陀螺仪
【STM32】I2C练习,HAL库读取MPU6050角度陀螺仪
982 0
|
8月前
|
运维 关系型数据库 MySQL
os-copilot安装_配置_功能测试全集
我是一位中级运维工程师,我平时工作会涉及到 各类服务器的 数据库 与 java环境配置 操作。 我顺利使用了OS Copilot的 -t -f | 功能,我的疑惑是不能在自动操作过程中直接给与脚本运行权限,必须需要自己运行一下 chmod 这个既然有了最高的权限,为什么就不能直接给与运行权限呢。 我认为 -t 功能有用,能解决后台运行基础命令操作。 我认为 -f 功能有用,可以通过task文件中撰写连续任务操作。 我认为 | 对文件理解上有很直接的解读,可以在理解新程序上有很大帮助。
260 86
|
5月前
|
JavaScript 安全 前端开发
关于Node.js,一定要学这个10+万Star项目 !!
一篇关于Node.js的宝藏项目——Node.js Best Practices。该项目在GitHub上已有102k Star,汇集了100+条最佳实践,涵盖架构、安全、性能等多方面。每条实践不仅有简明说明和详细解释,还附带代码示例及资源链接。文中通过三个实战案例(利用CPU多核、避免阻塞事件循环、使用中间件处理错误)展示了其实际应用价值,并推荐了几条对前端转Node.js开发者特别有用的最佳实践。强烈建议每位Node.js开发者学习此项目,理解“怎么做”与“为什么要这么做”,以提升开发能力。
140 3
|
机器学习/深度学习 人工智能 自然语言处理
了解AIGC:让AI创造内容,改变未来
了解AIGC:让AI创造内容,改变未来
676 2
|
11月前
|
机器学习/深度学习 编解码 自然语言处理
ResNet(残差网络)
【10月更文挑战第1天】
|
应用服务中间件 API nginx
网站统计——利用开源的网站流量分析统计工具
网站统计——利用开源的网站流量分析统计工具
215 0
|
缓存 网络协议 算法
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)
[蓝桥杯嵌入式]hal库 stm32 PWM的使用(随时修改占空比,随时修改频率)