函数介绍
本章内容会给大家展示
求字符串长度
strlen
长度不受限制的字符串函数
strcpy
strcat
strcmp
长度受限制的字符串函数介绍
strncpy
strncat
strncmp
字符串查找
strstr
并将这些函数全部模拟出来,带给大家。
字符串长度strlen函数
这个函数是用来实现求字符串长度的,话不多说我们上代码。
int main() { char str[] = "ABCDEFGHIJK"; int sz=strlen(str); printf("%d", sz); return 0; }
那么我们来实现模拟strlen函数
#include<assert.h> int my_strlen(const char* str) { assert(str); int i = 0; while (*str != '\0') { str++; i++; } return i; } int main() { char str[] = "ABCDEFGHIJK"; int sz=my_strlen(str); printf("%d", sz); return 0; }
我们知道strlen函数是以接收到’\0’为信号来计算的,所以我们传参传过去的是数字名也就是数组首元素地址,在自定义函数中我们只是计算数组长度,并不希望改变原数组,所以我们可以用const来修饰,为了防止穿过来的是空指针,我们用assert函数,不过需要引入一个<assert.h>的头文件。
长度不受限制的函数
strcpy
strcpy函数是字符串拷贝函数,我们直接看效果,上代码,来模拟。
int main() { char str1[] = "************"; char str2[] = "hello world"; strcpy(str1, str2); printf("%s\n", str1); return 0; }
接下来我们直接来实现
char* my_strcpy(char* str1, const char* str2) { char* ret = str1; assert(str1 && str2); while ((*str1++ = *str2++)) { ; } return 0; } int main() { char str1[] = "************"; char str2[] = "hello world"; my_strcpy(str1, str2); printf("%s\n", str1); return 0; }
首先,strcpy需要两个参数一个是拷贝数组,一个是拷贝目标数组,而拷贝目标数组我们不希望他被改变所以用const来修饰,为了防止传参过来的是空指针所以两个参数我们都用assert函数来检验。之后再用while循环来实现字符拷贝,因为strcpy函数返回的是拷贝字符串首地址,所以我们设置ret来接受首地址,最后返回ret即可。
strcat
strcat是拼接函数,我们依然先看效果。
int main() { char str1[20] = "ABCD"; char str2[] = "EFGH"; strcat(str1, str2); printf("%s", str1); return 0; }
了解了效果之后,我们来实现模拟。
char* my_strcat(char* str1,const char* str2) { char* ret = str1; assert(str1 && str2); while (*str1 != '\0') { str1++; } while ((*str1++ = *str2++)) { ; } return ret; } int main() { char str1[20] = "ABCD"; char str2[] = "EFGH"; my_strcat(str1, str2); printf("%s", str1); return 0; }
其实,追加函数和拷贝函数的原理很相似,只不过是从拷贝函数的末尾开始拷贝,所以我们设置一个循环,跳过追加目标函数的所有字符从’\0’,开始拷贝,接下来就和strcpy函数一样了。