题目
实现字符串比较(不用 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