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

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

模拟实现:"strlen strcpy strcat

strlen

strcat:

cpp 复制代码
#define  _CRT_SECURE_NO_WARNINGS 
#include<stdio.h>
#include<assert.h>
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<stdio.h>
//#include<assert.h>
//版本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<stdio.h>
#include<string.h>
int main() {
	char arr1[20] = "hello \0xxxxxxxxxx";
	char* p = "world";
	strcat(arr1, p);
	printf("%s\n", arr1);
	return 0;
}
模拟实现strcat
strcat返回目标空间的起始地址
//#include<stdio.h>
//#include<assert.h>
//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可实现自身追加自身
相关推荐
许怀楠1 小时前
【主页介绍】
linux·c++·贪心算法·visual studio
闲人编程2 小时前
图像去雾算法:从物理模型到深度学习实现
图像处理·人工智能·python·深度学习·算法·计算机视觉·去雾
咔咔学姐kk2 小时前
大模型微调技术宝典:Transformer架构,从小白到专家
人工智能·深度学习·学习·算法·transformer
木心爱编程3 小时前
C++链表实战:STL与手动实现详解
开发语言·c++·链表
离越词3 小时前
QTday1作业
c++·qt
haogexiaole3 小时前
Dijkstra 算法
算法
papership5 小时前
【入门级-算法-6、排序算法: 插入排序】
数据结构·算法·排序算法
HAH-HAH5 小时前
【蓝桥杯 2024 国 Java A】粉刷匠小蓝
c++·学习·数学·算法·职场和发展·蓝桥杯·组合数学
小吴同学·6 小时前
OPC Client第10讲:实现主界面;获取初始界面传来的所有配置信息config【C++读写Excel:xlnx;ODBC;缓冲区】
c++·wxwidgets
边疆.6 小时前
【C++】继承详解
开发语言·c++·继承