You need to enable JavaScript to run this app. C语言不使用strcmp实现字符串比对及assert校验的代码问题咨询
优惠活动
大模型
产品
解决方案
定价
更多

C语言不使用strcmp实现字符串比对及assert校验的代码问题咨询

现有代码存在的明确问题
  • 核心比对逻辑完全偏离预期:你实现的compare是累加两个字符串所有字符的ASCII值做总和差比对,这和逐位按ASCII值比对的规则完全不一致。比如字符串"ab"(ASCII和97+98=195)和"ba"(ASCII和98+97=195)会被判定为相等,但实际逐位比对时因为首字符'a' < 'b',"ab"是更小的;再比如"ac"(97+99=196)和"bb"(98+98=196)也会被误判为相等,和实际比对结果不符。
  • 局部变量未初始化触发未定义行为:compare函数里声明的s1、s2没有赋初始值就直接做累加操作,最终计算结果是栈内存里的随机残留值,根本不具备可靠性。
  • 没有覆盖字符串终止符的判定规则:按照常规字符串比对逻辑,当两个字符串前n个字符完全相等时,更短的字符串(先遇到'\0'的那个)应该判定为更小。你现在的累加逻辑完全没有这层判断,全靠两个字符串的ASCII和碰巧匹配预期,根本不是稳定的规则实现。
  • 冗余的性能浪费和多余实现:你在compare的第一个for循环条件里每次迭代都调用len_str(string_1),等于每走一步就把整个字符串从头到尾遍历一遍算长度,本来逐字符比对只需要遍历一次就能完成,这种写法把时间复杂度从O(n)拉到了O(n²)。同时你单独实现的len_str在逐字符比对场景下是完全冗余的,遍历过程中遇到字符串终止符'\0'就会自动停止,不需要提前计算全字符串长度。
  • 测试用例覆盖不足:现有测试用例只能覆盖前缀匹配的长短比较场景,完全测不出逻辑错位的问题,也没有覆盖首字符直接不同、ASCII和相等但内容不同、空字符串比对等关键场景,没法保证功能正确性。
  • 规则表述和测试逻辑冲突:你注释里写“返回正数表示第二个字符串更大”,但你自己的测试用例assert(compare("sand", "sa") > 0)实际期望第一个字符串(sand)比第二个(sa)大时返回正数,实际要实现的逻辑和标准strcmp完全一致,只是文字表述写反了。
修正后的可运行代码
#include <assert.h>

// 不依赖strcmp的逐字符比对实现
int compare(char string_1[], char string_2[])
{
    int i = 0;
    // 同步遍历两个字符串,直到遇到字符不相等 或 任意一个字符串终止
    while (string_1[i] != '\0' || string_2[i] != '\0') {
        if (string_1[i] != string_2[i]) {
            // 返回当前位的ASCII差值,完全匹配你测试用例的返回规则
            return string_1[i] - string_2[i];
        }
        i++;
    }
    // 所有遍历过的字符都相等,直接返回0
    return 0;
}

void test_compare(){
    // 基础相等场景校验
    assert(compare("sand", "sand") == 0);
    // 前缀匹配场景:短字符串是长字符串前缀时,短的更小
    assert(compare("sa", "sand") < 0);
    assert(compare("sand", "sa") > 0);
    // 首字符直接不同的场景校验
    assert(compare("apple", "banana") < 0);
    assert(compare("zoo", "apple") > 0);
    // 原逻辑会误判的ASCII和相等场景校验
    assert(compare("ab", "ba") < 0);
    assert(compare("ac", "bb") < 0);
    // 空字符串比对场景校验
    assert(compare("", "a") < 0);
    assert(compare("", "") == 0);
}

// 测试入口
int main() {
    test_compare();
    return 0;
}

该实现没有依赖标准库的strcmp()函数,逐位比对的逻辑和标准库行为对齐,所有测试用例可校验通过。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.26 20:15:04