strcmp字符串比较函数
在C语言当中,两个字符串不能直接用 == 直接比较,这是因为,字符串在C语言当中存的是首元素的地址,如果直接用 == 比较,比的其实是地址,所以才会使两个明明相同的字符串不相等。这时就需要用到strcmp函数。
strcmp如何使用
- strcmp(ch1,ch2),传递两个字符串,依次比较对应的两个字符的大小,相等就比下一个字符,直到比较完为止
- 如果相等返回0,ch1大返回大于0的值(vs里面是1),ch2大返回小于0的值(vs里面是-1)
- 我们可以通过判断返回值,打印大于小于或者等于的信息
int main()
{
char ch1[] = "abcd";
char ch2[] = "abcd";
int ret = strcmp(ch1, ch2);
printf("%d\n", ret);
if (ret == 0)
printf("ch1=ch2\n");
else if (ret > 0)
printf("ch1>ch2\n");
else
printf("ch1<ch2\n");
return 0;
}
strcmp模拟实现
int my_strcmp(const char* str1, const char* str2)
{
while (*str1 == *str2)
{
if (*str1 == '\0')
return 0;
str1++;
str2++;
}
if (*str1 > *str2)
return 1;
else
return -1;
}
解释:while循环里只要相等,就继续比较下一对,如果有不相等的,退出循环,再判断哪一个大,如果一直相等,并且最后等于 ‘\0’ 就表示,两个字符串完全相等。
strstr字符串查找函数
strstr如何使用
- strstr函数用于在一个字符串里面查找另一个字符串
- strstr(ch1,ch2),在ch1里面找ch2,如果找到,就返回ch1里面包含ch2的首地址
- 如果没有找到就返回NULL;
int main()
{
char ch1[] = "Helloworld";
char ch2[] = "wor";
char* ret = strstr(ch1, ch2);
if (ret == NULL)
{
printf("不存在\n");
}
else
{
printf("%s\n", ret);
}
return 0;
}
strstr模拟实现
char* my_strstr(const char*str1,const char* str2)
{
//assert(str1 && str2);
const char* s1 = str1;
const char* s2 = str2;
const char* p = str1;
while (*p)
{
s1 = p;
s2 = str2;
while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return (char*)p;
}
p++;
}
return NULL;
}