string库函数中 strcpy、strcat 、strcmp


前言

本文 着重对 strcat \ strcmp \ strcpy  以及
                    strncat\strncmp\strncpy 的介绍。


提示:以下是本篇文章正文内容,下面案例可供参考

一、strcpy and strncpy?

1.strcpy

strcpy 是有关字符串拷贝的函数 该函数的所需要传的参数类型为

char* strcpy(char * destination, const char * source );

将source指向的字符串,拷贝给destination指向的字符串

例子如下:

int main()
{
	char arr1[20] = "xxxxxxx";
	char arr2[] = "hellpwwda";
	strcpy(arr1, arr2);
	printf("%s\n", arr1);
}

 

注意:

  • 源字符串必须以 '\0' 结束。
  • 会将源字符串中的 '\0' 拷贝到目标空间。
  • 目标空间必须足够大,以确保能存放源字符串。
  • 目标空间必须可变。

2.strncpy

strncpy 用法与strcpy 用法相似,但多了一个参数  num

char * strncpy ( char * destination, const char * source, size_t num );

num表示要拷贝元素的个数 ,从起始位置开始拷贝,顶替目标字符串的元素所在位置 。

例子如下:

int main()
{
	char arr1[20] = "abcdefgh";
	char arr2[] = "qwer";
	strncpy(arr1, arr2, 2);
	printf("%s\n", arr1);
}

注意:

  • 拷贝num个字符从源字符串到目标空间。
  • 如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num

二、strcat and strncat?

1.strcat

strcat 是有关字符串追加字符的函数 下面是该函数所需传的参数类型:

char * strcat ( char * destination, const char * source );

用途:将source中的内容,追加到destination 之后

例子如下:

int main()
{
	char arr1[20] = "hello ";
	char arr2[] = "world";
	strcat(arr1, arr2);
	printf("%s", arr1);
}

 运行结果:

注意:

  • 源字符串必须以 '\0' 结束。
  • 目标空间必须有足够的大,能容纳下源字符串的内容。
  • 目标空间必须可修改。

2.strncat

strncat 与strcat 用途相似 

char * strncat ( char * destination, const char * source, size_t num );

 num 表示追加的字符个数

例子:

int main()
{
	char arr1[20] = "hello ";
	char arr2[] = "world";
	strncat(arr1, arr2,3);
	printf("%s", arr1);
}

运行结果如下:

三、strcmp and strncmp 

1.strcmp

strcmp 是有关字符串比较的函数 比较的是字符的ASCII码得值。

传入参数如下:

int strcmp ( const char * str1, const char * str2 );

标准规定:
第一个字符串大于第二个字符串,则返回大于 0 的数字
第一个字符串等于第二个字符串,则返回 0
第一个字符串小于第二个字符串,则返回小于 0 的数字
例子如下:
int main()
{
	char p[] = "obc";
	char q [] = "abcdef";
	int ret = strcmp(q, p);
	printf("%d\n", ret);
}

运行结果如下:

 2.strncmp 

int strncmp ( const char * str1, const char * str2, size_t num );

num 表示从第一个字符开始要比较的字符个数

比较到出现另个字符不一样或者一个字符串结束或者num个字符全部比较完。

四、strcpy strcat and strcmp 的实现

注:指针均不为空指针;为了保险起见,可以加上assert 断言语句

1.strcpy

char *my_strcpy(char *dest, const char*src)
{
    char *ret = dest;
    while((*dest++ = *src++))
     {
     ;
     }
     return ret;
}

2.strcat 

char* my_strcat(char* dest, const char* src)
{
	char* ret = dest;
	//1.找到目标函数中的\0
	while (*dest)
	{
		dest++;
	}
	//2.追加字符串
	while (*dest++ = *src++);
	return ret;
}

首先,找到'\0' ,然后进行替换,之后追加即可

3.strcmp

原版,在VS的编译环境下 返回值为1,0,-1;

int my_cmp(const char* s1,const char* s2)
{
	while (*s1 == *s2)
	{
		if (*s1 == '\0')
		{
			return 0;
		}
		s1++;
		s2++;
	}
	if (*s1 > *s2)
	{
		return 1;
	}
	else
		return -1;
}

改进版本:只要符合s1大于s2返回正值,小于返回负值即可

int my_cmp(const char* s1,const char* s2)
{
	while (*s1 == *s2)
	{
		if (*s1 == '\0')
		{
			return 0;
		}
		s1++;
		s2++;
	}
	
	return *s1 - *s2;
}

总结

要熟练掌握这些类函数的用法,并且了解如何实现他们的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值