当前位置: 首页 > article >正文

华为OD机试(C卷,100分)- 字符串排序

(C卷,100分)- 字符串排序

题目描述

排序规则:
单词中字母比较不区分大小写,两个单词先以第一个字母作为排序的基准,如果第一个字母相同,就用第二个字母为基准,如果第二个字母相同就以第三个字母为基准。依此类推,如果到某个字母不相同,字母顺序在前的那个单词顺序在前。
当一个短单词和一个长单词的开头部分都相同(即短单词是长单词从首字母开始的一部分),短单词顺序在前。
字母大小写不同的相同单词,只输出一次。

输入描述

输出描述

用例
输入 Hello hello world
输出 Hello world
说明 无

输入 i LOVE Cc I love CC Hello Hel Hellow
输出 Cc Hel Hello Hellow i LOVE
说明 无

题目解析

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <ctype.h>

#define MAX_WORDS 100
#define MAX_WORD_LENGTH 50

int compare_words(const void *a, const void *b) {
    char *word1 = *(char **)a;
    char *word2 = *(char **)b;
    int i = 0;

    while (word1[i] != '\0' && word2[i] != '\0') {
        if (tolower(word1[i]) != tolower(word2[i])) {
            return tolower(word1[i]) - tolower(word2[i]);
        }
        i++;
    }
        return strlen(word1) - strlen(word2);

}

int main() {
    char input[1024];
    char *words[MAX_WORDS];
    int num_words = 0;
    char *word;

    // 读取输入字符串
    fgets(input, sizeof(input), stdin);

    // 将输入字符串分割成单词
    word = strtok(input, " ");
    while (word != NULL && num_words < MAX_WORDS) {
        words[num_words++] = word;
        word = strtok(NULL, " ");
    }

    // 对单词数组进行排序
    qsort(words, num_words, sizeof(char *), compare_words);

    // 输出排序后的单词
    for (int i = 0; i < num_words; i++) {
        if (i > 0 && strcmp(words[i], words[i-1]) != 0)
               printf("%s ", words[i]);
    }
    printf("\n");

    return 0;
}

http://www.kler.cn/a/287090.html

相关文章:

  • adb 命令使用大全
  • 机器学习-核函数(Kernel Function)
  • 图片生成Prompt编写技巧
  • 【面试题】JVM部分[2025/1/13 ~ 2025/1/19]
  • AI 编程工具—Cursor AI 对话模式详解 内嵌对话模式
  • 云计算与物联网技术的融合应用(在工业、农业、家居、医疗、环境、城市等整理较全)
  • 《JavaEE进阶》----5.<SpringMVC②剩余基本操作(CookieSessionHeader响应)>
  • 自己开发完整项目一、登录功能-03(使用springSecurity安全框架,查询用户角色权限)
  • fabricjs 完成橡皮擦
  • 艾瑞白皮书解读(四)丨深度解析企业数据治理第一步:咨询环节
  • 【解决】CentOS7 生命周期结束后 使用 yum命令报错问题
  • assert()在solidity的运用,模糊测试案例
  • 【C++】vector(下)--下篇
  • prometheus基于文件的服务发现
  • 百日草花语探秘:天长地久的情感寄托与丰富内涵解析
  • 基于Virtex UltraScale+ VU13P FPGA的4路FMC接口基带信号处理平台
  • Python测试之测试覆盖率统计
  • Linux:SQLite 数据库
  • 安卓13 鼠标右键作返回键,鼠标事件修改
  • Vidda电视X Ultra等加入能效补贴,京东天猫可买量大管饱
  • 【验证码逆向专栏】某某滑块逆向分析
  • Java常见设计模式
  • 第二证券:三大因素将共同推动悲观情绪修复 风格阶段性趋于平衡
  • 【算法】二分查找
  • ARM32开发——(二十一)ADC系统工作原理
  • MobaXterm 终端工具使用