strcmp函数原型:
int strcmp(const char *s1,const char *s2);
作用:若str1=str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数
应用
#include<stdio.h>
#include<string.h>
int main()
{
char *str1="shikaikai";
char *str2="shhkazkai";
//根据比对系统带的函数strcmp()应该是通过Assicll码,来逐个比较字符串的字符大小,
int res = strcmp(str1,str2);
if(res==0)printf("两个字符串相等\n");
printf("res:%d",res);
return 0;
}
输出结果:res:1
strcmp()自我实现的方法:
#include<stdio.h>
#include<string.h>
#include<assert.h>
int myStrcmp(char *str1,char *str2)
{
int res=0;
int sum_str1=0;//str1字符串Assic码总部先赋值为0
int sum_str2=0;//同上
char *bakstr1=str1;//预存str1\str2的内存指向
char *bakstr2=str2;
while(*str1 && *str2 && (*str1==*str2)!='\0')
{
str1++;
str2++;
}
if(*str1||*str2!='\0')
{
str1=bakstr1;//str1、str2内存指向变动的找回
str2=bakstr2;
while(*str1!='\0')
{
sum_str1+=*str1;//累加str1的ASSIC码
str1++;
}
while(*str2!='\0')
{
sum_str2+=*str2;//累加str2的ASSIC码
str2++;
}
}
//res=*str1-*str2;//底层源码是通过Assicll码,来逐个比较字符串的字符大小,
//不严谨,应该通过assicll码的总和
res=sum_str1-sum_str2;//通过assicll码的总和比较
if(res<0)
{
res=-1;
}
if(res>0)
{
res=1;
}
return res;
}
int main()
{
char *pstr1="shikaikai";
char *pstr2="shhkazkai";
int res;
//根据比对系统带的函数strcmp()是通过Assicll码,来逐个比较字符串的字符大小,
//res=strcmp(str1,str2);
res=myStrcmp(pstr1,pstr2);//通过assicll码的总和比较
if(res==0)printf("两个字符串相等\n");
printf("res:%d",res);
return 0;
}