m_strcmp
strcmp比较两个字符串的大小,strcmp(str1, str2);
从str1和str2的第一个元素比较直到出现不同,或者遇到'\0'结束。如果str1 > str2 返回正数,str1 < str2返回负数,相等返回零。
eg:
str1 | str2 | |
---|---|---|
abcde | > | abcd |
abcde | > | abcddd |
abcde | < | abcdef |
自己实现这个函数:
#include <stdio.h>
#include <string.h>
int m_strcmp(char *str1, char *str2)
{
int i = 0;
while(str1[i] != '\0')
{
printf("str1 str2%s %s\n", str1, str2);
if(str2[i] != '\0')
{
if(str1[i] < str2[i])
{
return -1;
}else if(str1[i] > str2[i])
{
return 1;
}else if(str1[i] = str2[i])
{
i++;
continue;
}else
{
printf("this is a problem!\n");
}
}else if(str2[i] == '\0')
{
return 1;//str1>str2
}else
{
printf("this is a problem2!\n");
}
}
if(str2[i] == '\0')
{
return 0;
}else
{
return -1;//str1<str2
}
}
int main ()
{
char str1[15];
char str2[15];
int ret;
scanf("%s", str1);
scanf("%s", str2);
printf("%s %s\n", str1, str2);
ret = m_strcmp(str1, str2);
if(ret < 0)
{
printf("str1 小于 str2\n");
}
else if(ret > 0)
{
printf("str2 小于 str1\n");
}
else
{
printf("str1 等于 str2\n");
}
printf("%d\n", ret);
return(0);
}
大佬的优质代码:
int __cdecl strcmp (
const char * src,
const char * dst
)
{
int ret = 0 ;
while((ret = *(unsigned char *)src - *(unsigned char *)dst) == 0 && *dst)
++src, ++dst;
if ( ret < 0 )
ret = -1 ;
else if ( ret > 0 )
ret = 1 ;
return( ret );
}
身体是1,财富·名利·是0,没有1有再多的0都没有用!!