strcmp和strncmp函数

1.strcmp

This function starts comparing the first character of each string. If they are equal to each other, it continues with the following pairs until the characters differ or until a terminating null-character is reached.//摘自msdn
此函数开始比较每个字符串的第一个字符。如果它们彼此相等,则继续使用以下对,直到字符消失或达到终止的空字符为止
注意:

返回值 str1 str2
1 >
0 =
-1 <

1.第一个字符串大于第二个字符串,则返回大于0的数字
2.第一个字符串等于第二个字符串,则返回0
3.第一个字符串小于第二个字符串,则返回小于0的数字

  int my_strcmp(const char* str1, const char* str2)
    {
    	const unsigned char* src1 = (const unsigned char*)str1;
    	//强转成const unsigned char* 是为了下面两个指针的值的ascii相减
    	const unsigned char* src2 = (const unsigned char*)str2;
    	int ret = 0;
    	assert(src1 != NULL && src2 != NULL);
    	while (!(*src1 - *src2) && *src2)//如果两个值不相等或*src2的ascii为0,
    	{//(*src1-*src2,所以如果*src2的ascii的值为0,那*src1就比*src2大或相等,显然结果就已知了,退出循环),
    		//就继续判断, 否则,求出相减的值并退出循环
    		src1++, src2++;
    	}
    	ret = (*src1 - *src2);
    	if (ret < 0)
    	{
    		return -1;
    	}
    	else if (ret>0)
    	{
    		return 1;
    	}
    	return (ret);
    }
  
     int main()
    {
    	char str1[20]= "abcd";
    	char str2[20] = "abcdef";
    	printf("%d\n",my_strcmp(str1, str2));
    	return 0;
    }

运行结果:
在这里插入图片描述

2.strncmp

strncmp比较两个字符串前n个字符,其他内容和strcmp一样。

   int my_strncmp(const char* str1, const char* str2,size_t n)//比较两个字符串前n个字符
    {
    	const unsigned char* src1 = (const unsigned char*)str1;
    	//强转成const unsigned char* 是为了下面两个指针的值的ascii相减
    	const unsigned char* src2 = (const unsigned char*)str2;
    	int ret = 0;
    	assert(src1 != NULL && src2 != NULL);
    	while (!(*src1 - *src2) && *src2 && n > 0 )//如果两个值不相等或*src2的ascii为0,
    	{//(*src1-*src2,所以如果*src2的ascii的值为0,那*src1就比*src2大或相等,显然结果就已知了,退出循环),
    	 //就继续判断, 否则,求出相减的值并退出循环
    		src1++, src2++,n--;
    	}
    	ret = (*(--src1) - *(--src2));//比较n个字符指针移动到了n+1个位置,-1返回n的范围内
    	if (ret < 0)
    	{
    		return -1;
    	}
    	else if (ret>0)
    	{
    		return 1;
    	}
    	return (ret);
    }
    int main()
    {
    	char str1[20]= "abcd";
    	char str2[20] = "abcdef";
    	printf("%d\n",my_strncmp(str1, str2,4));
    	return 0;
    }

运行结果:
在这里插入图片描述

你可能感兴趣的:(C语言)