目录:
模拟实现Mystrlen
模拟实现My_strcpy
模拟实现My_strcmp
模拟实现strcat
前言:对于基本的使用字符串操作函数应该是很容易的,为了加深一下对于操作函数的理解,稍稍模拟一下函数实现
--------------------------------------------------------------------------------------------------------------------------------
模拟实现Mystrlen
原型:strlen(str)
目的:计算str的长度
实现方式:递归
//递归实现strlen
#include
#include
int my_strlen(char* a)
{
if (*a == '\0')
return 0;
return 1 + my_strlen(++a);
}
int main()
{
char* a = "abcdef";
int len = my_strlen(a);
printf("%d", len);
return 0;
}
1.使用递归前要明确递归的退出条件
2.每一次地址都会从左端向右移动一个字节,直到碰到'\0'
实现方式:指针及计数器
//实现strlen计数器
#include
int my_strlen(char* a)
{
int count = 0;
while (*a != '\0')
{
a++;
count++;
}
return count;
}
int main()
{
char* a = "abcdefasdf";
int len = my_strlen(a);
printf("%d", len);
return 0;
}
1.同样的道理,传的地址是字符串"abcdefasdf"中的首地址
2.由于元素类型是char*,所以a++跳过一个字节
3.使用count记录在'\0'前有多少个字符
---------------------------------------------------------------------------------------------------------------------------------
模拟实现My_strcpy
原型:strcpy(arr1,arr2)
目的:将arr2中的字符串复制到arr1中
实现方式:
void my_strcpy(char* a, char* b)
{
while (*b != '\0')
{
*a++ = *b++;
}
*a++ = *b++;//将'\0'复制到a中
}
int main()
{
char a[20];
char* b = "abcdefasd";
//strcpy(a, b);
my_strcpy(a, b);
printf("%s", a);
return 0;
}
1.在函数my_strcpy中 *a++ = *b ++的作用就是将arr2中的'\0'复制过去
2.由于是将b复制到a中那么也要将'\0'复制过去,否则将会出现以下情况
--------------------------------------------------------------------------------------------------------------------------------
模拟实现My_strcmp
原型:strcmp(str1,str2)
目的:比较两个字符串是否相同,相同返回0,若str1
模拟实现:
#include
//实现比较字符串strcmp 相同返回0 若ab返回正数
int my_strcmp(char* a, char* b)
{
while (*a == *b)
{
if (*a == '\0')
return 0;
a++;
b++;
}
if (*a > *b)
return 1;
else if (*a < *b)
return -1;
//这里也可以return *a - *b
}
int main()
{
char* a = "bcdef";
char b[20] = "bcdef";
int len = my_strcmp(a, b);
printf("%d", len);
return 0;
}
1.如果*a和*b相同那么进入while循环,使a和b往下走直至两者不同退出循环,或者两者等于'\0' 退出循环,这两个都是退出循环的条件
2.如果*a和*b不相等那么就进入if else判断中
---------------------------------------------------------------------------------------------------------------------------------
模拟实现strcat
原型:strcat(str1,str2)
目的:将字符串str2添加到字符串str1的尾部连接两个字符串
模拟实现:
char* my_strcat(char* arr1, const char* arr2)
{
char* ret = arr1;//保存一下arr1的地址
while (*arr1 != '\0')
arr1++;
while (*arr2 != '\0')
{
*arr1 = *arr2;
arr1++;
arr2++;
}
*arr1 = '\0';//将arr2中的'\0'连接到arr1中
return ret;
}
1.先找到arr1中指向'\0'的地址,这也是连接开始的点,arr2和arr1连接的时候要覆盖'\0'否则
打印的时候只会打印arr1
2.在过程中会改变arr1的地址,所以要提前保存一下arr1的地址,以便于下面返回