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

C语言字符数组先按数值升序后按字母顺序排序的实现方法

C语言混合字符数组排序实现

实现逻辑

  • 遍历原数组,拆分出所有数字字符、字母字符分别存储
  • 数字字符排序:按数值升序排列,0放在数字序列末尾(匹配给出的目标输出格式)
  • 字母字符排序:按a-z字典序升序排列
  • 按「排序后数字串 + 排序后字母串」拼接得到最终结果

完整可运行代码

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

// 数字比较函数:数值升序,0放最后
int cmp_num(const void *a, const void *b) {
    char c1 = *(char*)a;
    char c2 = *(char*)b;
    if (c1 == '0') return 1;
    if (c2 == '0') return -1;
    return c1 - c2;
}

// 字母比较函数:a-z升序
int cmp_alpha(const void *a, const void *b) {
    return *(char*)a - *(char*)b;
}

int main() {
    char src[] = "38ch50ej16af49di27bg";
    char nums[20] = {0}, alphas[20] = {0}, res[40] = {0};
    int num_cnt = 0, alpha_cnt = 0;

    // 拆分数字和字母
    for (int i = 0; i < strlen(src); i++) {
        if (isdigit(src[i])) {
            nums[num_cnt++] = src[i];
        } else if (isalpha(src[i])) {
            alphas[alpha_cnt++] = src[i];
        }
    }

    // 分别排序
    qsort(nums, num_cnt, sizeof(char), cmp_num);
    qsort(alphas, alpha_cnt, sizeof(char), cmp_alpha);

    // 拼接结果
    strcat(res, nums);
    strcat(res, alphas);

    printf("%s\n", res);
    return 0;
}

运行输出

1234567890abcdefghij

注意事项

  • 如果需要数字严格按0-9升序排列(0放在数字序列开头),直接删除cmp_num函数中两个关于0的判断逻辑,仅保留return c1 - c2;即可
  • 代码默认所有字母大小写一致,若存在大小写混合场景,可在比较前先将字符统一转成小写/大写再做差值比较

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 08:15:04