C.strcmp()函数

文章目录

一. 库函数strcmp()

二. 库函数strncmp()

三. 模拟strcmp()


一. 库函数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;
}

 打印结果:

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值