
strcmp函数详解:字符串【比较】的利器
·
目录
一,strcmp函数的简介
strcmp函数是C语言中的字符串比较函数,用于比较两个字符串的大小。
🍂函数头文件:
#include <string.h>
🍂函数原型:
int strcmp ( const char * str1, const char * str2 );
- 该函数接受两个参数,分别为要比较的两个字符串的指针。
- 返回值为整形,表示两个字符串的大小关系。
🍂函数返回值:
- 若str1小于str2,则返回负整数,即小于0的数。
- 若str1和str2相等,则返回0。
- 若str1大于str2,则返回正整数,即大于0的数。
二,strcmp函数的原理
strcmp函数的比较规则是按照字典序进行比较,即逐个字符比较。具体的比较过程如下:
- 若两个字符相等,则继续比较下一个字符。
- 若两个字符不相等,则返回它们的ASCII码差值(ASCII码值大的字符串大)。
三,strcmp函数的用法
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "appple";
char str2[] = "banana";
int ret = strcmp(str1, str2);
if (ret == 0)
printf("str1和str2相等\n");
else if (ret > 0)
printf("str1大于str2\n");
else
printf("str1小于str2\n");
return 0;
}
🍂运行结果:
四,strcmp函数的注意事项
1,字符串的比较是按照字典序进行的,因此大小写字母的比较结果不同。
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "hello";
char str2[] = "HELLO";
int ret = strcmp(str1, str2);
if (ret == 0)
printf("str1和str2相等\n");
else if (ret > 0)
printf("str1大于str2\n");
else
printf("str1小于str2\n");
return 0;
}
🍂运行结果:
2,在比较字符串时,需要确保字符串以'\0'结尾,否则可能会导致比较结果不正确。
#include <stdio.h>
#include <string.h>
int main()
{
char str1[] = "hello";
char str2[] = "hello";
str1[5] = '!';
int ret = strcmp(str1, str2);
if (ret == 0)
printf("str1和str2相等\n");
else if (ret > 0)
printf("str1大于str2\n");
else
printf("str1小于str2\n");
return 0;
}
🍂运行结果:
🍂分析:
在这段代码中,我们将str1字符串的结尾标识符'\0'改成了'!',运行代码后,输出结果为"str1大于str2"。这是因为str1字符串没有以'\0'结尾,所以strcmp函数会继续比较下去,直到遇到str2字符串的结尾标识符'\0'。由于str1字符串比str2字符串长,所以str1被认为是大于str2。
五,strcmp函数的模拟实现
#include <stdio.h>
#include <string.h>
#include <assert.h>
int my_strcmp(const char* str1, const char* str2)
{
assert(str1 && str2);
while (*str1 == *str2)
{
if (*str1 == '\0')
return 0;//相等
str1++;
str2++;
}
if (*str1 > *str2)
return 1;//大于
else
return -1;//小于
}
int main()
{
char str1[] = "appple";
char str2[] = "banana";
int ret = my_strcmp(str1, str2);
if (ret == 0)
printf("str1和str2相等\n");
else if (ret > 0)
printf("str1大于str2\n");
else
printf("str1小于str2\n");
return 0;
}
更多推荐
所有评论(0)