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
相关产品推荐
相关产品推荐

