题目

实现字符串比较(不用 strcmp)

思路

本题自己实现字典序比较,不能调用 strcmp,返回值约定与标准库一致。

同步前进两个指针:只要两字符都非空且相等就同时后移;停止时返回两字符的无符号差值 *(unsigned char*)s1 - *(unsigned char*)s2

解题分析

strcmp 返回第一个不相等字符的差(unsigned char 相减)。全相等返回 0;小于 0 表示 a 字典序在前。自写时别只返回 0/1,要返回差值才与标准行为一致。

完整程序

#include <stdio.h>

static int my_cmp(const char *a, const char *b)
{
    while (*a && *b && *a == *b) {
        a++;
        b++;
    }
    return (unsigned char)*a - (unsigned char)*b;
}

int main(void)
{
    char a[500], b[500];
    if (scanf("%499s %499s", a, b) != 2) {
        return 1;
    }
    printf("%d\n", my_cmp(a, b));
    return 0;
}

运行示例

输入:

abc abd

输出:

-1