strcmp函数的调用与模拟实现

一:关于调用strcmp的规则

1.调用方式:int strcmp ( const char * str1, const char * str2 );
2.第一个字符串大于第二个字符串,则返回大于0的数字.
3.第一个字符串等于第二个字符串,则返回0.
4.第一个字符串小于第二个字符串,则返回小于0的数字.
***比较依据:比较两个字符串中对应字符的ASCII值的大小

二:原函数的调用

1.程序代码

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

int main()
{
	char arr1[]="abcdefg";
	char arr2[]="abcdefG";
	char arr3[]="abcdefg";
	printf("%d\n",strcmp(arr1,arr2));    //g的ASCII大于G的则返回的是1
	printf("%d\n",strcmp(arr1,arr3));   //g的ASCII等于g的则返回的是0
	printf("%d\n",strcmp(arr2,arr3));   //G的ASCII小于g的则返回的是-1
	return 0;
}

2.运行结果

在这里插入图片描述

三:模拟实现strcmp

1.编程思想

a.将两个不可更改的字符串首地址传到函数中(用const修饰的变量)。
b.将两个字符串中对应元素的ASCII值分别进行比较,从而确定那个字符串大。

2.程序代码

#include<stdio.h>
#include<assert.h> 

int my_strcmp(const char* arr1,const char* arr2)
{
	int ret=0;
	assert(arr1);
	assert(arr2);
	while( !(ret = *(unsigned char*) arr1 - *(unsigned char* ) arr2 )         //  整形提升
		&& *arr1)  //两个条件同时满足才执行循环内容
	{
		arr2++;
		arr1++;	
	}
	if(ret<0)
		return -1;
	else if(ret>0)
		return 1;
	else
	{
		;   //do nothing 
	}
	return 0;
}

int main()
{
	char arr1[]="123abcd";
	char arr2[]="123Abcd";
	char arr3[]="123Abcd";
	printf("%d\n",my_strcmp(arr1,arr2));
	printf("%d\n",my_strcmp(arr2,arr3));
    printf("%d\n",my_strcmp(arr3,arr1));
	return 0;
}


3.运行结果

在这里插入图片描述

猜你喜欢

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