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

如何不使用内置函数对多个字符串进行字母排序?(学生作业)

不用内置函数对多个字符串进行字母排序的实现方法

嘿,我完全懂你在学校作业里的困扰——只比较首字符的思路确实太局限了,毕竟字符串排序得逐字符对比才能得到正确结果嘛!而且不能用内置函数的话,咱们可以自己实现核心的字符串比较逻辑,再搭配一个简单的排序算法(比如冒泡排序,对作业来说足够直观),就能搞定啦。

核心思路拆解

  • 先实现一个自定义的字符串比较函数:不用strcmp,自己逐个字符对比两个字符串,直到找到不同的字符,或者其中一个字符串结束(如果一个是另一个的前缀,那更短的字符串更小)
  • 把这个比较函数融入到基础排序算法里(比如冒泡排序),用来判断两个字符串是否需要交换位置

代码示例(C语言)

先写自定义的字符串比较函数:

// 自定义字符串比较函数:返回值>0表示str1>str2,<0表示str1<str2,=0表示相等
int compareStrings(char str1[], char str2[]) {
    int i = 0;
    // 逐个字符对比,直到遇到不同字符或其中一个字符串结束
    while (str1[i] != '\0' && str2[i] != '\0') {
        if (str1[i] != str2[i]) {
            // 直接返回字符的ASCII差值
            return str1[i] - str2[i];
        }
        i++;
    }
    // 如果前面都相同,比较长度:短的字符串更小
    return str1[i] - str2[i];
}

然后用冒泡排序来对字符串数组排序:

void sortStrings(char arr[][100], int count) {
    char temp[100]; // 临时字符串用于交换
    for (int i = 0; i < count - 1; i++) {
        for (int j = 0; j < count - i - 1; j++) {
            // 用自定义的比较函数判断是否需要交换
            if (compareStrings(arr[j], arr[j+1]) > 0) {
                // 手动交换两个字符串(不用内置的strcpy)
                int k = 0;
                while (arr[j][k] != '\0') {
                    temp[k] = arr[j][k];
                    k++;
                }
                temp[k] = '\0';
                
                k = 0;
                while (arr[j+1][k] != '\0') {
                    arr[j][k] = arr[j+1][k];
                    k++;
                }
                arr[j][k] = '\0';
                
                k = 0;
                while (temp[k] != '\0') {
                    arr[j+1][k] = temp[k];
                    k++;
                }
                arr[j+1][k] = '\0';
            }
        }
    }
}

最后是测试的主函数:

#include <stdio.h>

// 上面的compareStrings和sortStrings函数放在这里

int main() {
    char strings[5][100] = {"banana", "apple", "cherry", "date", "blueberry"};
    int num = 5;
    
    printf("排序前的字符串:\n");
    for (int i = 0; i < num; i++) {
        printf("%s\n", strings[i]);
    }
    
    sortStrings(strings, num);
    
    printf("\n排序后的字符串:\n");
    for (int i = 0; i < num; i++) {
        printf("%s\n", strings[i]);
    }
    
    return 0;
}

关键细节说明

  • 字符串比较的时候,一定要逐字符对比,不能只看首字符——比如"apple"和"apricot",首两个字符都相同,得比到第三个字符才能分出大小
  • 交换字符串的时候,我们也手动实现了复制逻辑,完全不用内置的strcpy,符合作业要求
  • 冒泡排序虽然效率不是最高,但胜在逻辑简单,容易理解和手写,非常适合学校作业的场景

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:44:35