C 语言标准函数库中包括 strcmp 函数,用于字符串的比较。作为练习,我们自己编写一个功能与之相同的函数
时间: 2024-12-29 13:33:04 浏览: 12
在C语言中,`strcmp()`函数确实属于标准库函数,主要用于比较两个字符串是否相等,其工作原理是逐个字符比较,直到找到第一个不匹配的字符或者其中一个字符串结束。如果所有字符都相等,那么较长的那个字符串被视为更大。我们可以根据`strcmp()`的工作原理编写一个类似但不依赖于库函数的自定义字符串比较函数,例如:
```c
#include <stdio.h>
#include <limits.h> // 使用INT_MIN获取负整数最小值,以便理解返回值
// 自定义字符串比较函数,类似于strcmp,忽略大小写
int my_strcmp(const char *str1, const char *str2)
{
while (*str1 != '\0' && *str2 != '\0') // 只有当字符串结束才停止比较
{
unsigned char uc1 = (unsigned char)*str1; // 转换为无符号字符进行大小写无关的比较
unsigned char uc2 = (unsigned char)*str2;
if (uc1 >= 'A' && uc1 <= 'Z') uc1 -= 'A' - 'a'; // 如果大写字母转换为小写
if (uc2 >= 'A' && uc2 <= 'Z') uc2 -= 'A' - 'a';
if (uc1 > uc2) return 1; // 如果第一个字符更大,返回正数
if (uc1 < uc2) return -1; // 如果第一个字符更小,返回负数
str1++, str2++; // 否则继续比较下一个字符
}
// 如果到达其中一个字符串的结束位置,未找到不匹配字符,则长度更长的字符串被视为更大
return (str1 - str2) ? ((str1 - str2) > 0) : 0; // 长度大的返回正数,长度相等返回0
}
int main()
{
char str1[] = "Hello";
char str2[] = "hello";
int result = my_strcmp(str1, str2);
if (result > 0)
{
printf("str1 is greater than str2.\n");
}
else if (result < 0)
{
printf("str1 is less than str2.\n");
}
else
{
printf("str1 and str2 are equal.\n");
}
return 0;
}
```
阅读全文