🤩个人主页:小光死嗑C++😇
😃本人介绍:一名机械生非要找死学计算机,c++爱好者,正在c++道路上探索,愿意拿出一百二十的精力去与C++死磕到底!
😃文章难易程度:本人的文章没有貂蝉那么美,没有吕布那么强,通俗点说,小光的文章并不像那些大牛一样那么神奇,没有那么高深的算法,只是对自己所掌握的内容进行总结、梳理,最后一步一步细细细的写出来。所以不管是入门的小白,还是要复习牛逼的大佬,都是可以非常容易理解的希望各位不要嫌我啰嗦!
😆结尾:最后说一点,小光的文章可能会有点不一样,只为了主打你在阅读文字繁多的资料时也可以让你开开心心的浏览!
🎉1.strcmp
int strcmp (const char * str1, const char * str2)
int strcmp 表示最后返回一个整型值
const char * str1 表示接受第一个待比较的字符串首地址
const char * str2 表示接受第二个待比较的字符串的首地址(注:因为我们只是对两块空间进行比较,并不进行修改,所以加上const 使逻辑更加缜密)
返回值:
1、如果第一个字符串大于第二个字符串会返回一个大于0的值
2、如果第一个字符串小于达尔戈字符串会返回一个小于0的值
3、如果第一个字符串与第二个字符串相等会返回一个0
具体是怎么比的?
先实现一下strcmp的功能
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[] = "abcdef";
char arr2[] = "abdef";
int ret = strcmp(arr1, arr2);
printf("%d\n", ret);
return 0;
}
因为c的ASCII码值比d的ASCII码值小,所以,arr1 就比 arr2小,最后就返回一个小于0的值
🧧干货一:
strcmp()函数首先比较的是第一个字符,如果第一个字符相等的话,会再比较第二个字符,以此类推!直到遇见不一样的字符,如果没有不一样的字符,则两个字符相等返回0
🧧strcmp()的模拟实现
int my_strcmp(const char* str1, const char* str2)
{
assert(str1 && str2);
while (*str1 == *str2)
{
if (*str2 == '\0')
{
return 0;
}
str1++;
str2++;
}
return *str1 - *str2;
}
int main()
{
char arr1[] = "abc";
char arr2[] = "abd";
int ret = my_strcmp(arr1, arr2);
printf("%d\n", ret);
return 0;
}
🧧干货二:
请看图解:
所以,千万不要就认为成大于和小于就只返回1和-1,从而写出以下代码:>
如果要有判断条件也应该是 >0 或者 <0
🧧干货三:
总结以下先前学习的三个以str开头的函数
1.strcpy()
2.strcat()
3.strcmp()
==知识点:==这三个函数好像跟字符串长度都没有关系对不对,不管你用它们那个函数,它们都是以‘\0’来进行结束的,都会直接干到‘\0’,根本不管你有多长,够不够存的下,而我只负责执行到‘\0’,所以这样的函数,在使用的时候要多加注意!!!、
例如:strcpy()
数组arr2中根本就存不下6个字符,可strcpy()偏偏会向里面拷贝6个字符,虽然产生了报错,但是还是拷贝了过去,加入VS这个平台没有对着个函数进行报错的话,那就会造成大的错误!!!另外两个函数也是一个道理的!
所以库函数中就引入了一些长度受限制的函数
1.strncpy
2.strncat
3.strncmp
前两个已经介绍过了,下面介绍第三个strncmp()
🎉strncmp()
它与strcmp()函数大致是一样的,只是参数部分多了一个要比较的字符个数size_t num
下面先使用一下这个代码
int main()
{
char arr1[] = "abcdef";
char arr2[] = "defg";
int ret = strncmp(arr1, arr2, 3);
printf("%d\n", ret);
return 0;
}
🧧干货一:
这个函数的脾气就是你让我比较几个字符,我就给你比较几个字符,绝不会多比较!!!就是非常听话😏,而其他的细节都与strcmp()函数一样,请结合着学习!
🧧strncmp()的模拟实现
int my_strncmp(const char* str1, const char* str2, size_t num)
{
assert(str1 && str2);
while (num)
{
if (*str1 == *str2)
{
str1++;
str2++;
num--;
}
else
return *str1 - *str2;
}
return 0;
}
int main()
{
char arr1[] = "abcdef";
char arr2[] = "abcdf";
int ret = my_strncmp(arr1, arr2, 5);
printf("%d\n", ret);
return 0;
}