c语言练习41:深入理解字符串函数strlen strcpy strcat

深入理解字符串函数strlen   strcpy   strcat

模拟实现:”strlen   strcpy   strcat

strlen

c语言练习41:深入理解字符串函数strlen strcpy strcat_第1张图片

 c语言练习41:深入理解字符串函数strlen strcpy strcat_第2张图片

c语言练习41:深入理解字符串函数strlen strcpy strcat_第3张图片

c语言练习41:深入理解字符串函数strlen strcpy strcat_第4张图片

strcat:

c语言练习41:深入理解字符串函数strlen strcpy strcat_第5张图片

#define  _CRT_SECURE_NO_WARNINGS 
#include
#include
strlen
1.通过指针移动模拟
//int my_strlen(char* str) {
//	size_t count = 0;
//	assert(str != NULL);
//	while (*str != '\0') {
//		count++;
//		str++;
//	}
//	return count;
//}
2.通过指针减指针模拟
//int my_strlen(char* str) {
//	char* start = str;
//	while (*str != '\0') {
//		str++;
//	}
//	return str - start;
//}
//通过递归模拟
//int my_strlen(char* str) {
//	if (*str != '\0')
//		return 1 + my_strlen(str + 1);
//	else
//		return 0;
//}
//int main() {
//	char arr[] = "abcd";
//	size_t len=my_strlen(arr);
//	printf("%zd\n", len);
//	return 0;
//}
//模拟实现strcpy
//strcpy的功能是将原字符串拷贝到目标空间
//所以返回目标空间的起始地址,方便观察目标空间的数据
//#include
//#include
//版本1
//void my_strcpy(char* dest, char* str) {
//	while (*str != '\0') {
//		*dest = *str;
//		str++;
//		dest++;
//	}
//	*dest = *str;
//}
//版本2
//dest指向的空间是需要改变的,而src指向的空间是不需要被改变的
//void my_strcpy(char* dest, const char* str) {//加上const可以提高代码的健壮性
//	assert(dest && str);//解引用时指针不能为空
//	while (*dest++ = *str++) {//()内为赋值表达式且'\0'的ASCII为0
//		;
//	}
//}
//版本3
//char* my_strcpy(char* dest,const char* str) {
//	char* start = dest;//dest为1级指针然后赋给start
//	//判断是否为空指针
//	assert(dest);
//	assert(str);
//	while (*dest++=*str++)
//	{
//		;
//	}
//	return start;//返回目标空间的起始地址
//}
//int main() {
//	char arr1[] = "abcd";
//	char arr2[20] = {0};
//	my_strcpy(arr2, arr1);
//	printf("%s\n", arr2);
//	版本3:链式访问
//	///*printf("%s\n", my_strcpy(arr2, arr1));*/
//	return 0;
//}
模拟strcat---字符串的追加
 my_strcat无法实现自身追加自身------因为目标空间的'\0'会被覆盖
 -------------------但strcat可实现-------------------
注:1.目标空间的有'\0'(从哪里开始追加),源头空间也得有'\0'(追加到什么时候结束)
2.目标空间足够大且目标空间可修改
测试
#include
#include
int main() {
	char arr1[20] = "hello \0xxxxxxxxxx";
	char* p = "world";
	strcat(arr1, p);
	printf("%s\n", arr1);
	return 0;
}
模拟实现strcat
strcat返回目标空间的起始地址
//#include
//#include
//char* my_strcat(char* dest, const char* src) {
//	char* start = dest;
//	assert(dest);
//	assert(src);
//	//1.找到目标空间中的'\0'
//	while (*dest!='\0')
//	{
//		dest++;
//	}
//	//2.完成拷贝
//	while (*dest++=*src++)
//	{
//		;
//	}
//	return start;
//}
//int main() {
//	char arr1[20] = "hello";
//	char* p = "world";
//	my_strcat(arr1, p);
//	printf("%s\n", arr1);
//	return 0;
//}
//strncat可实现自身追加自身

你可能感兴趣的:(c语言,c++,算法)