模拟实现字符串操作函数

 

目录:

模拟实现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'复制过去,否则将会出现以下情况

模拟实现字符串操作函数_第1张图片

 --------------------------------------------------------------------------------------------------------------------------------

 模拟实现My_strcmp

原型:strcmp(str1,str2)

目的:比较两个字符串是否相同,相同返回0,若str1str2返回正数

模拟实现:

#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的地址,以便于下面返回

你可能感兴趣的:(心得,c语言,c++)