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

C语言插入排序实现不区分大小写字母排序问题求助

不区分大小写插入排序实现修复

现有代码核心问题

  • 转换得到的小写待排序值lowUnsortedItem完全没有参与比较逻辑,仍在直接对比字符原始ASCII值,大小写敏感的问题没有解决
  • 仅在待排序字符为大写时给lowUnsortedItem赋值,小写场景下该变量是未初始化的垃圾值,会引发逻辑错误
  • 对比已排序区字符时没有将已排序字符也转成小写,比较规则不符合需求

修复后完整代码

#include <stdio.h>
#define MAX_NUMS 10

void InsertionSort(char list[]);

int main()
{
  int index = 0;              
  char letters[MAX_NUMS];  

  printf("Enter a word: ");
  scanf("%s", letters);

  printf("输入内容:%s\n", letters);

  InsertionSort(letters);  

  /* Print sorted list */
  printf("\nThe input set, in ascending order:\n");
  while (letters[index] != '\0') {
    printf("%c\n", letters[index]);
    index += 1;
  }
}

void InsertionSort(char list[])
{
  int unsorted;         
  int sorted;           
  char unsortedItem;     
  char lowUnsortedItem, lowSortedItem;

  // 插入排序默认第一个元素属于已排序区,外层从索引1开始遍历
  for (unsorted = 1; list[unsorted] != '\0'; unsorted++) {
    unsortedItem = list[unsorted];
    // 统一将待排序元素转小写用于比较
    lowUnsortedItem = (unsortedItem >= 'A' && unsortedItem <= 'Z') ? unsortedItem + 32 : unsortedItem;

    // 内层循环比较时也将已排序元素转小写
    for (sorted = unsorted - 1; sorted >= 0; sorted--) {
        lowSortedItem = (list[sorted] >= 'A' && list[sorted] <= 'Z') ? list[sorted] + 32 : list[sorted];
        if (lowSortedItem > lowUnsortedItem) {
            list[sorted + 1] = list[sorted];
        } else {
            break;
        }
    }

    list[sorted + 1] = unsortedItem; // 插入原始字符,保留原有大小写
  }
}

修改说明

仅在大小比较阶段统一转小写判断,最终输出保留字符原始大小写,输入dEaBc时输出顺序为a B c d E,符合d排在E前面的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 17:57:06