strncmp函数的调用与模拟实现!!

一:调用的规则

1. int strncmp (const char* str1, const char* str2, size_t n)
2.比较到出现另个字符不一样或者一个字符串结束或者n个字符全部比较完。

3.主要内容截取:

【参数】str1, str2 为需要比较的两个字符串,n为要比较的字符的数目。

字符串大小的比较是以ASCII 码表上的顺序来决定,此顺序亦为字符的值。strncmp( )首先将s1 第一个字符值减去s2 第一个字符值,若差值为0 则再继续比较下个字符,直到字符结束标志’\0’,若差值不为0,则将差值返回。例如字符串"Ac"和"ba"比较则会返回字符"A"(65)和’b’(98)的差值(-33)。
注意:要比较的字符包括字符串结束标志’\0’,而且一旦遇到’\0’就结束比较,无论n是多少,不再继续比较后边的字符。
【返回值】若str1与str2的前n个字符相同,则返回0;若s1大于s2,则返回大于0的值;若s1 若小于s2,则返回小于0的值。

二:strncmp函数的调用

1.程序代码

#include<stdio.h>
#include<string.h>

int main()
{
	char arr1[]="abcdefg";
	char arr2[]="abcdefG";
	char arr3[]="abcdefg";
	printf(" %2d\n",strncmp(arr1,arr2,strlen(arr1)));  
	printf(" %2d\n",strncmp(arr1,arr3,strlen(arr1)));   
	printf("%2d\n",strncmp(arr2,arr3,strlen(arr1)));   
	return 0;
}

2.运行结果

在这里插入图片描述

此处可见strncmp的返回值与strcmp的返回值不太一样,想了解为什么请点击文章末尾链接查看。

三:模拟实现strncmp

1.

#include<stdio.h>    //模拟实现strncmp
#include<string.h>
#include<assert.h>

int my_strncmp(const char* arr1, const char* arr2,int n)
{
	int ret=0;
	assert(arr1);
	assert(arr2);
	
		while(!(ret=*(unsigned char*)arr1-*(unsigned char* )arr2)
         && *arr1&& *arr2 && n)
		{
          arr1;
		  arr2;
		  n--;
	    }

		return ret;
}
int main()
{
	char arr1[]="abcdefg";
	char arr2[]="Abcdefg";
	char arr3[]="abcdefg";
	int  num;
	printf("请输入要比较的字符长度num(num<%d):",strlen(arr1)+1);
	scanf("%d",&num);
	printf(" %2d\n",strncmp(arr1,arr2,num));  
	printf(" %2d\n",strncmp(arr1,arr3,num));   
	printf("%2d\n",strncmp(arr2,arr3,num)); 
	return 0;
}

2.运行结果

在这里插入图片描述

四:拓展

想了解更多关于strncmp的信息可以点击下面这条链接(转自c 语言中文网站)

http://c.biancheng.net/cpp/html/2717.html

猜你喜欢

转载自blog.csdn.net/jack_wang128801/article/details/84455349