You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何自定义C语言compare函数实现A<a<B<b…的字符串比较(不用strcmp)

实现自定义字符串比较函数int compare(char* A, char* B)

核心思路

要满足A<a<B<b<…<Z<z的排序规则,核心是给每个字符分配自定义排序权重,替代ASCII码的默认顺序:

  • 大写字母A-Z:权重为2 * (c - 'A'),比如A对应0,B对应2,…,Z对应50
  • 小写字母a-z:权重为2 * (c - 'a') + 1,比如a对应1,b对应3,…,z对应51

这样就能保证同一字母的大写在前、小写在后,且整体按字母顺序排列。

完整实现代码

#include <string.h>

int compare(char* A, char* B) {
    // 遍历字符串直到遇到结束符或字符不同
    while (*A != '\0' && *B != '\0') {
        int weightA, weightB;
        
        // 计算A当前字符的权重
        if (*A >= 'A' && *A <= 'Z') {
            weightA = 2 * (*A - 'A');
        } else if (*A >= 'a' && *A <= 'z') {
            weightA = 2 * (*A - 'a') + 1;
        } else {
            // 非字母字符按ASCII码处理(可根据需求调整规则)
            weightA = *A;
        }
        
        // 计算B当前字符的权重
        if (*B >= 'A' && *B <= 'Z') {
            weightB = 2 * (*B - 'A');
        } else if (*B >= 'a' && *B <= 'z') {
            weightB = 2 * (*B - 'a') + 1;
        } else {
            weightB = *B;
        }
        
        // 比较权重并返回结果
        if (weightA > weightB) {
            return 1;
        } else if (weightA < weightB) {
            return 0;
        }
        
        // 当前字符相等,继续遍历下一个
        A++;
        B++;
    }
    
    // 处理其中一个字符串已遍历完的情况
    if (*A != '\0') {
        // A还有剩余字符,说明A更大
        return 1;
    }
    if (*B != '\0') {
        // B还有剩余字符,说明B更大
        return 0;
    }
    
    // 两个字符串完全相同,按需求返回0(可根据场景调整)
    return 0;
}

关键细节说明

  1. 非字母字符处理:代码中对非字母字符直接使用ASCII码作为权重,若业务不需要处理这类字符,可添加判断逻辑返回特定值或忽略。
  2. 边界场景覆盖:
    • 空字符串:A空B非空返回0,B空A非空返回1,都为空返回0。
    • 前缀匹配:比如A="Abc"、B="Ab",A更长则返回1。
  3. 性能:字符串最大长度为100,遍历复杂度为O(n),完全满足需求。

内容的提问来源于stack exchange,提问作者Angus Wai

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 13:35:02