C++ 中strncat strncpy strcat strcpy的讲解以及如何自我实现

      strncat  strncpy  strcat  strcpy看起来是应用了4个函数,其实在我看来他们只有两个,要应用这些函数必须要包含头文件<string.h>。

strcpy是字符串的复制,可以将a的字符串的内容拷贝到b里面。下面是我自己实现的strcpy的自我编写

#include<iostream>
using namespace std;
void mystrcpy(char* a, const char* b)
{
	while (*b != '\0')
	{
		*a = *b;
		a++;
		b++;
	}
	*a = '\0';
}
int main()
{
	char arr1[] = { "i love china" };
	char arr2[30];
	mystrcpy(arr2, arr1);
	printf("%s", arr2);

我们都知道字符串的最后一定会有一个'\0'作为最后的终止符,那么我们便以他为终点来进行,这里我用了while循环来一个一个的传递值来完成拷贝但是别忘了最后要在a最后面加上'\0'。因为是先判断后开始拷贝,所以当b为\0时,会跳出循环,使得a的最后没有\0。、

strcat是字符串的拼接,如abcd字符串和jkl字符串拼接成abcdjkl一个字符串。下面是代码的实现

#include<iostream>
using namespace std;
void mystrcat(char* a, char* b)
{
	while (*a != '\0')
	{
		a++;
	}
	while (*b != '\0')
	{
		*a++ = *b++;
	}
	*a = '\0';
}
int main()
{
	char a[] = "i love china";
	char b[] = " very much";
	mystrcat(a, b);
	printf("%s", a);
}

如果要将一个字符串与另一个字符串拼接,那么我要找到我要从哪里开始拼接,所以我变要找到被拼接的字符串的末尾如上面举例中abcd的末尾是d。那我们都知道字符串的最后会有\0,所以我通过一次while循环来锁定它。然后再从\0开始拼接(注意一定要把\0覆盖掉)。直到遇到下一个字符串的\0,便停止循环。(别忘了加\0)

为什么我开头说只有两个函数呢,因为strcpy与strncpy都是大同小异的。只不过strncpy需要你额外传给他一个变量,好让他知道你要复制几个。那么我们便可以将while循环改成for循环来完成复制条件。

#include<iostream>
using namespace std;
void mystrncpy(char* a, char* b, int n)
{
	int i = 0;
	for (i = 0; *b != '\0' && i < n; i++)
	{
		*a = *b;
		a++;
		b++;
	}
	*a = '\0';
}
int main()
{
	char a[] = "abc";
	char b[] = "efgh";
	mystrncpy(a,b,3);
	printf("%s",a);
}

但是我的for循环的结束条件不是仅有一个,还有*b!='\0'这是因为防止b只有四个字母,而你偏偏让他传五个引起的问题。通过代码可以看见我只是在strcpy的源代码上做了一些改动,核心的思想相差不大。

strncat与strcat的情况也是类似的。

#include<iostream>
using namespace std;
void mystrncat(char* a, char* b, int n)
{
	while (*a != '\0')
	{
		a++;
	}
	int i = 0;
	for (i = 0; *b != '\0'&&  i < n; i++)
	{
		*a = *b;
		a++;
		b++;
	}
	*a = '\0';
}
int main()
{
	char a[] = "abcde";
	char b[] = "fgh";
	mystrncat(a,b,2);
	printf("%s",a);
}

  • 12
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值