前往小程序,Get更优阅读体验!
立即前往
发布
社区首页 >专栏 >【字符函数】strcpy函数(字符串复制函数)+strcat函数(字符串追加)+strcmp函数(字符串比较)【笔记】

【字符函数】strcpy函数(字符串复制函数)+strcat函数(字符串追加)+strcmp函数(字符串比较)【笔记】

作者头像
用户11367452
发布2024-11-21 08:07:14
发布2024-11-21 08:07:14
8800
代码可运行
举报
文章被收录于专栏:学习学习
运行总次数:0
代码可运行

1.复制函数--------------strcpy函数

函数使用

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

strcpy函数用于拷贝字符串,即将一个字符串中的内容拷贝到另一个字符串中(会覆盖原字符串内容)。它的参数是两个指针

第一个指针指向目标字符串的首地址,即要拷贝到什么地方。

第二个指针指向来源字符串的首地址,即用什么字符串拷贝。返回值是目标字符串的首地址

代码语言:javascript
代码运行次数:0
复制
#include<stdio.h>
#include<string.h>
int main()
{
	//char* p = NULL;
	//p = "zhangsan";//p是指针变量,可以赋值,将z的地址赋值给p
	//char name[20] = "xxxxxxxxxx";
	//name = "zhangsan";//err,name数组名是地址,地址是一个常量值,不能被赋值,name已经被固定死了

	char name1[20] = "xxxxxxxxxx";
	char str1[] = "zhang\0san";
	strcpy(name1, str1);
	printf("%s\n", name1);
	
	char name2[20] = "xxxxxxxxxx";
	char str2[] = { 'b','i','t' };
	strcpy(name2, str2);
	printf("%s\n", name2);

	//char* p = "abcdef";//p指向常量字符串,存放a的地址,常量字符串是不能修改的
	//char arr[] = "bit";
	//strcpy(p, arr);//err

	//char p[] = "abcdef";//将其放入数组中,使其变成变量可以修改
	//char arr[] = "bit";
	//strcpy(p, arr);//right
	return 0;
}

模拟实现

复制到时候,函数会将被拷贝字符串的‘/0’一同复制到目标字符串,当字符串没有‘/0‘时,会一直向后查找,直到找到

总结:

  • 源字符串必须以 ‘\0’ 结束。
  • 会将源字符串中的 ‘\0’ 拷贝到目标空间。
  • 目标空间必须足够大,以确保能存放源字符串。
  • 目标空间必须可修改。
.模拟实现
  • 进入函数体时先定义一个指针变量保存目标空间的起始位置,便于之后返回。然后将源字符串中的字符一一赋值给目标空间,直到遇到源字符串中的’\0’,将’\0’也赋值给目标空间后结束赋值,并返回目标空间的起始位置。
代码语言:javascript
代码运行次数:0
复制
#include<assert.h>
char* my_strcpy(char* destination, const char* source)
{
	assert(str != NULL);//断言,若str为NULL,报错,头文件assert.h
	//或者直接assert(destination && source);
	char* str = destination;//保存目标空间的起始位置
	while (*source != '\0')//或者直接while (*source)
	{
		*destination++ = *source++;
	}
	*destination = *source;
	return str;
}

二.strcat(字符串追加)

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

strcat函数用于追加字符串,即将一个字符串中的内容追加到另一个字符串中。它的参数是两个指针,

  • 第一个指针指向目标字符串的首地址,即要追加到什么地方。
  • 第二个指针指向来源字符串的首地址,即用什么字符串追加。
  • 返回值是目标字符串的首地址
代码语言:javascript
代码运行次数:0
复制
#include<stdio.h>
#include<string.h>
int main()
{
	char arr1[20] = "hello ";
	char arr2[] = "world";
	strcat(arr1, "world");
	printf("%s\n", arr2);

	char arr3[20] = "hello ";
	char arr4[] = { 'a','b','c','d','e','f' };
	strcat(arr3, arr4);
	printf("%s\n", arr3);
	return 0;
}

三.strcmp(字符串比较)

1.函数使用

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

strcmp函数用于比较两个字符串内容的函数。

它的参数是两个指针

指针分别指向两个待比较字符串的首地址。它的返回值是一个整型数字。 依次比较的是对应字符的ASCII值。

  • 当str1 > str2的时候返回正数。
  • 当str1 == str2的时候返回0。
  • 当str1 < str2的时候返回负数。
代码语言:javascript
代码运行次数:0
复制
//错误的写法
#include<stdio.h>
int main()
{
	char arr1[] = "zhangsan";
	char arr2[] = "zhangsan";
	if (arr1 == arr2)
		printf("==\n");
	else
		printf("!=\n");//输出!=
	return 0;
}
代码语言:javascript
代码运行次数:0
复制
//正确的比较方法
#include<stdio.h>
#include<string.h>
int main()
{
	char arr1[] = "zhangsan";
	char arr2[] = "zhangsan";
	int ret = strcmp(arr1, arr2);
	if (ret < 0)
		printf("<\n");
	else if (ret == 0)
		printf("==\n");//输出==
	else
		printf(">\n");
	return 0;
}
  • 第⼀个字符串大于第⼆个字符串,则返回大于0的数字。
  • 第⼀个字符串等于第⼆个字符串,则返回0。
  • 第⼀个字符串小于第⼆个字符串,则返回⼩于0的数字。

那么如何判断两个字符串? 比较两个字符串中对应位置上字符ASCII码值的大小。 2.模拟实现

进入函数体直接比较起始位置的字符的大小。如果相同并且不为’\0’那么继续比较下一对字符的大小;如果相同并且为’\0’那么说明字符串比较完毕,那么直接返回0;如果不同则直接返回str1与str2中对应字符的ASCII值的差值(当str1中对应字符大于str2中的对应字符时返回正值,当str1中对应字符小于str2中的对应字符时返回负值)。

代码语言:javascript
代码运行次数:0
复制
#include<assert.h>
int my_strcmp(const char* str1, const char* str2)
{
	assert(str1 && str2);//断言,若str为NULL,报错,头文件assert.h
	while (*str1 == *str2)
	{
		//遇到都为'\0'的时候,说明字符串相等返回0
		if (*str1 == '\0')
			return 0;
		str1++;
		str2++;
	}
	return (*str1 - *str2);
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2024-09-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.复制函数--------------strcpy函数
    • 函数使用
    • 模拟实现
      • .模拟实现
    • 三.strcmp(字符串比较)
      • 1.函数使用
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档