2024年最全C语言模拟实现字符串处理函数,C C++大厂面试真题解析大全

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

找 ‘\0’ ,将字符串首地址传递过来,解引用后的值不是‘\0’的话,指针位置就后移,同时计数器count加1,知道指针解引用后的值为‘\0’,循环停止,函数返回计数器count的值

size_t my_strlen(char* str)
{
	size_t count = 0;
	while (*str != '\0')
	{
		count++;
		str++;
	}
	return count;
}

int main()
{
	char str[1000] = "I have a my_strlen hanshu";
	size_t len = my_strlen(str);
	printf("%zu", len);
	return 0;
}

指针减指针

将字符串首元素地址传过来之后,先用字符指针保存,再将保存的指针移动,找‘\0’,找到‘\0’后,用这个位置的指针减去字符串首元素地址即为字符串长度

指针减去指针得到的值为两指针之间的元素个数

size_t my_strlen(char* str)
{
	char* str2 = str;
	while (*str2 != '\0')
		str2++;
	return str2 - str;
}
int main()
{
	char str[1000] = "I have a my_strlen hanshu";
	size_t len = my_strlen(str);
	printf("%zu", len);
	return 0;
}

递归

递归方法的核心就是大事化小

但要注意递归必须有条件,并且每次递归都要越来越接近这个条件

当传递过来的指针解引用为‘\0’时,说明递归结束,否则就指针后移继续递归

size_t my_strlen(char* str)
{
	if (*str == '\0')
		return 0;
	else
		return my_strlen(str + 1) + 1;
}
int main()
{
	char str[1000] = "I have a my_strlen hanshu";
	size_t len = my_strlen(str);
	printf("%zu", len);
	return 0;
}

2.strcpy函数的模拟实现

strcpy函数的作用是拷贝字符串

strcpy的函数原型

注意事项:

  • 拷贝字符串,必须将 ‘\0’ 也拷贝过去
  • 目表字符串必须是可变的,不能是常量字符串
  • 函数要返回目标字符串的首地址,所以要先将首地址存起来
#include<assert.h>
char* my_strcpy(char* str1, const char* str2)
{
	assert(str1 && str2);
	char* ret = str1;
	while (*str2 != '\0')
	{
		*str1 = *str2;
		str1++;
		str2++;
	}
	*str1 = *str2;
	return str1;
}
int main()
{
	char str1[100] = { "0" };
	char str2[100] = "my_strcpy hanshu";
	my_strcpy(str1, str2);
	return 0;
}

3.strcmp函数的模拟实现

strcmp函数的作用是字符串比较

strcmp函数原型

 注意事项:

当str1>str2时返回一个大于0的数,str1<str2时返回一个小于0的数,str1=str2时返回0,所以模拟实现时,当str1!=str2时,可以用 *str1-*str2 来表示返回值

//实现strcmp函数
#incldue<stdio.h>
#include<assert.h>
int my_strcmp(const char* str1, const char* str2)
{
	assert(str1 && str2);
	while (*str1 && *str2)
	{
		if (*str2 == *str1)
		{
			str1++;
			str2++;
		}
		else
			return *str1 - *str2;
	}
	if (*str1 == *str2 && *str1 == '\0')
		return 0;
}
int main()
{
	char str1[100] = "abcdefg";
	char str2[100] = "abcdefr";
	if (my_strcmp(str1, str2) > 0)
		printf("str1>str2\n");
	else
		printf("str2>str1\n");
	return 0;
}

4.strcat函数的模拟实现

strcat函数的作用是实现字符串的连接

strcat函数原型

   实现strcat函数的时候,要先找到‘\0’,然后再模仿字符串拷贝函数的实现将字符串拷贝过去即可,且‘\0’也必须拷贝过去

#include<stdio.h>
#include<assert.h>
char* my_strcat(char* str1, const char* str2)
{
	assert(str1&&str2);
	char* ret = str1;
	//先找str1的  \0
	while (*++str1)
		 ;
	//将str2拷贝过来


![img](https://img-blog.csdnimg.cn/img_convert/025826db708f3784b849d515394765d1.png)
![img](https://img-blog.csdnimg.cn/img_convert/c1a834b0856bf5e63b173a6fbeb613fd.png)

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

(img-LPz4eb3P-1715601983634)]

**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!**

**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**

**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618668825)**

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值