C语言------字符串函数(2)

1.strcat函数功能实现

复制代码
​
char* mystrcat(char* dest, const char* src)
{
	assert(dest);
	assert(src);
	char* ret = dest;
	//找到目标空间里面的斜杠0的位置,再追加
	while (*dest != '\0')
	{
		dest++;
	}
	while ((*dest++ = *src++))
	{
		;
	}
	return ret;
}
int main()
{
	char arr1[20] = "hello";
	char arr2[] = "world";
	mystrcat(arr1, arr2);
	printf("%s\n", arr1);
	return 0;
}

​

(1)这个函数的作用就是实现字符串的追加,把一个加到另外一个上面;

(2)这个函数的返回值是目标处的地址,因为这个过程指针在移动变化,所以我们在最开始的时

候就定义指针变量ret记录初始时候的位置,最后返回ret;

(3)第一个循环就是一直到找到斜杠0才停止;

第二个循环就是让指针后移,并且在移动的同时,实现对应位置的赋值;

(4)当移动到斜杠0的时候,就会因为斜杠0等于斜杠0的赋值,是的表达式的结果是0,循环结束;

(5)这个函数不能自己拼接自己,因为如果自己拼接的话,这种情况下2个指针指向的位置是相同

的,dest向右移动的时候,src也向右移动,但是src指针永远不会找到斜杠0进行终止循环,因为斜

杠0已经被覆盖掉了,超出范围以后会造成程序的崩溃;这里不能实现的主要症结就是2个指针指向

同一位置;

2.strcmp函数功能实现

(1)第一个字符串大,返回大于0的数;

(2)第二个字符串大,返回小于0的数;

(3)2个字符串相等,返回0;

复制代码
#include<assert.h>
int my_strcmp(const char* str1, const char* str2)
{
	int ret = 0;
	assert(str1 != NULL);
	assert(str2 != NULL);
	while (*str1 == *str2)
	{
		if (*str1 == '\0')
			return 0;
		str1++;
		str2++;
	}
	return *str1 - *str2;
}

int main()
{
	char arr1[20] = "abcdef";
	char arr2[20] = "acdef";
	int ret = my_strcmp(arr1, arr2);
	printf("%d\n", ret);
	return 0;
}

这里返回指针相减,也就是相差字符的个数,是符合条件的。

相关推荐
Wang's Blog5 分钟前
Java 项目实战: 交友项目 - 喜欢与取消喜欢
java·开发语言·交友
quantdash_cc41 分钟前
如何检查滚动收益率计算中的窗口长度不足?——从数学定义到 Pandas 实现
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
衍生星球1 小时前
【Java 语言】— 方法(方法定义、调用、参数、返回值、方法重载)
java·开发语言·方法
CodeGL1 小时前
16、Python Web开发
开发语言·前端·python
喵了几个咪1 小时前
GoWind UBA 拆解:把 Doris UNIQUE KEY 翻译成 ClickHouse——读数正确性对齐实录
开发语言·后端·clickhouse·微服务·golang·gowind
FRing031 小时前
JavaScript入门到精通二十九(内置构造函数(Object、Array))
开发语言·前端·javascript
syagain_zsx1 小时前
ODB 与 MySQL:C++ 里的 ORM 实践(类即表、事务铁律与查询封装)
开发语言·数据库·c++·mysql·工具库·1024程序员节
小鱼仙官1 小时前
使用Qt封装C/C++ 动态库 用于第三方调用
c语言·c++·qt
小嘉丶学长1 小时前
Day08 · 字符串(二)
服务器·开发语言·python·学习·1024程序员节
萌动的小火苗2 小时前
MQTT的QoS0、QoS1、QoS2有什么区别?
开发语言·网络·python·php·信息与通信