057. 实现字符串的比较函数
在C语言中,字符串比较是一个常见的操作。标准库函数 strcmp
可以实现字符串的比较,但它按照字典序比较两个字符串,并返回一个整数值来表示比较结果。如果需要实现自定义的字符串比较函数,可以参考 strcmp
的行为,或者根据特定需求进行调整。
C语言实现字符串比较函数
#include <stdio.h>
// 自定义字符串比较函数
int customStrcmp(const char* str1, const char* str2) {
if (str1 == NULL || str2 == NULL) {
printf("输入的指针为空!\n");
return -1; // 返回一个错误标志
}
// 遍历两个字符串,逐个比较字符
while (*str1 != '\0' && *str2 != '\0') {
if (*str1 != *str2) {
return *str1 - *str2; // 返回字符的差值
}
str1++;
str2++;
}
// 如果所有字符都相等,返回0
if (*str1 == '\0' && *str2 == '\0') {
return 0;
}
// 如果一个字符串已经结束,另一个字符串还有剩余字符
if (*str1 == '\0') {
return -1; // str1 小于 str2
} else {
return 1; // str1 大于 str2
}
}
int main() {
char str1[] = "apple";
char str2[] = "app";
char str3[] = "banana";
printf("比较 '%s' 和 '%s': %d\n", str1, str2, customStrcmp(str1, str2));
printf("比较 '%s' 和 '%s': %d\n", str1, str3, customStrcmp(str1, str3));
printf("比较 '%s' 和 '%s': %d\n", str2, str3, customStrcmp(str2, str3));
return 0;
}
代码说明
函数定义:
-
customStrcmp
接收两个参数:str1
和str2
,它们是需要比较的两个字符串。 -
检查输入指针是否为空,避免空指针解引用导致的错误。
比较过程:
-
使用
while
循环逐个比较两个字符串的字符,直到遇到字符串结束符'\0'
。 -
如果发现不相等的字符,返回这两个字符的差值(
*str1 - *str2
)。 -
如果所有字符都相等,但一个字符串已经结束,另一个字符串还有剩余字符,则根据剩余字符的情况返回
-1
或1
。
返回值:
-
如果
str1
和str2
相等,返回0
。 -
如果
str1
小于str2
,返回负整数。 -
如果
str1
大于str2
,返回正整数。
主函数:
-
定义了几个测试字符串。
-
调用
customStrcmp
函数比较字符串,并打印比较结果。
示例运行
输入:
无输入
输出:
比较 'apple' 和 'app': 1
比较 'apple' 和 'banana': -1
比较 'app' 和 'banana': -1
注意事项
空指针检查:在函数中检查输入指针是否为空,避免空指针解引用导致的程序崩溃。
比较逻辑:按照字典序比较字符串,逐个字符比较,直到找到不相等的字符或遇到字符串结束符。
返回值:
-
返回值遵循
strcmp
的约定,即: -
返回
0
表示两个字符串相等。 -
返回负整数表示第一个字符串小于第二个字符串。
-
返回正整数表示第一个字符串大于第二个字符串。
使用标准库函数 strcmp
虽然手动实现字符串比较函数有助于理解字符串操作的原理,但在实际开发中,通常推荐使用标准库函数 strcmp
,因为它经过了优化,并且更安全。例如:
#include <stdio.h>
#include <string.h> // 包含 strcmp 函数
int main() {
char str1[] = "apple";
char str2[] = "app";
char str3[] = "banana";
printf("比较 '%s' 和 '%s': %d\n", str1, str2, strcmp(str1, str2));
printf("比较 '%s' 和 '%s': %d\n", str1, str3, strcmp(str1, str3));
printf("比较 '%s' 和 '%s': %d\n", str2, str3, strcmp(str2, str3));
return 0;
}
总结
通过手动实现字符串比较函数,可以更好地理解字符串比较的逻辑。在实际应用中,建议使用标准库函数 strcmp
,但了解其内部实现原理有助于更好地使用它。
视频讲解
BiliBili: 视睿网络-哔哩哔哩视频 (bilibili.com)