文章目录
一. 库函数strcmp()
参考文档:strcmp - C++ Reference (cplusplus.com)
int strcmp ( const char * str1, const char * str2 );
函数描述:比较两个字符串。
比较C字符串str1和C字符串str2。
这个函数开始比较每个字符串的第一个字符。如果它们彼此相等,则继续执行以下对,直到字符不同或达到终止空字符为止。
这个函数执行字符的二进制比较。有关考虑特定于语言环境规则的函数,请参见strcoll - C++ Reference (cplusplus.com)。
函数参数:
- str1:要比较的C字符串。
- str2:要比较的C字符串。
函数返回:返回一个整数值,指示字符串之间的关系:
返回值 | 表示 |
<0 | 第一个不匹配的字符在ptr1中的值小于ptr2中的值 |
0 | 两个字符串的内容是相等的 |
>0 | 第一个不匹配的字符在ptr1中的值大于ptr2中的值 |
#include <stdio.h>
#include <string.h>
int main()
{
char* str1 = "A";
char* str2 = "B";
printf("%d\n", strcmp(str1, str2)); // -1 str1 < str2
char* str3 = "A";
char* str4 = "A";
printf("%d\n", strcmp(str3, str4)); // 0 str1 == str2
char* str5 = "B";
char* str6 = "A";
printf("%d\n", strcmp(str5, str6)); // 1 str1 > str2
return 0;
}
二. 库函数strncmp()
参考文档:
int strncmp ( const char * str1, const char * str2, size_t num );
函数描述:比较两个字符串。
比较C字符串str1和C字符串str2的最多num个字符。
这个函数开始比较每个字符串的第一个字符。如果它们彼此相等,则继续执行后面的对,直到字符不相同,直到达到终止的空字符,或者直到两个字符串中的num字符匹配,以先发生的为准。
函数参数:
- str1:要比较的C字符串。
- str2:要比较的C字符串。
- num:要比较的最大字符数,Size_t是一个无符号整型。
函数返回:返回一个整数值,指示字符串之间的关系:
返回值 | 表示 |
<0 | 第一个不匹配的字符在ptr1中的值小于ptr2中的值 |
0 | 两个字符串的内容是相等的 |
>0 | 第一个不匹配的字符在ptr1中的值大于ptr2中的值 |
#include <stdio.h>
#include <string.h>
int main()
{
char* str1 = "A";
char* str2 = "B";
printf("%d\n", strncmp(str1, str2, 1)); // -1 str1 < str2
char* str3 = "A";
char* str4 = "A";
printf("%d\n", strncmp(str3, str4, 1)); // 0 str1 == str2
char* str5 = "B";
char* str6 = "A";
printf("%d\n", strncmp(str5, str6, 1)); // 1 str1 > str2
return 0;
}
三. 模拟strcmp()
#pragma once
#include <stdio.h>
#include <assert.h>
/// <summary>
///
/// </summary>
/// <param name="str1"></param>
/// <param name="str2"></param>
/// <returns>返回类型int,-1=str1<str2 0=str1=str2 1=str1>str2</returns>
int my_strcmp(const char* str1, const char* str2)
{
assert(str1 && str2);
// 比较原则:
// - 第一个字符串大于第二个字符串,则返回大于0的数字。
// - 第一个字符串等于第二个字符串,则返回0。
// - 第一个字符串小于第二个字符串,则返回小于0的数字。
while (*str1 == *str2)
{
// 相等
if (*str1 == '\0')
{
return 0;
}
str1++;
str2++;
}
// 程序走到这里说明两个字符串肯定不相等,这时会出现两个结果,小于或大于
return (*str1 - *str2);
}
int main()
{
// 创建临时字符串:
char arr1[20] = { "zhangsan" };
char arr2[20] = { "zhangsanfeng" };
// 比较规则:zz相等往下走.. nn相等往下走..f和\0不相等f大.
int ret = my_strcmp(arr1, arr2);
if (ret < 0)
{
printf("<\n");
}
else if (ret == 0)
{
printf("==\n");
}
else if (ret > 0)
{
printf(">\n");
}
return 0;
}
打印结果: