一:关于调用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.运行结果