首页 > 其他分享 >C语言 | 字符串函数(第二篇)【全网最详细,通俗易懂,必收藏】

C语言 | 字符串函数(第二篇)【全网最详细,通俗易懂,必收藏】

时间:2024-06-06 11:59:55浏览次数:17  
标签:return int str2 通俗易懂 C语言 char num 字符串 第二篇

字符串函数(第二篇)

一、strncpy

1、strncpy的使用

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

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

代码:

//strncpy
int main()
{
	char arr1[10] = "abcde";
	char arr2[20] = { 0 };
	strncpy(arr2, arr1, 3);
	return 0;
}

结果:arr1 中的 abc 被拷贝到了 arr2 中
在这里插入图片描述

2、strncpy的模拟实现

从arr1中拷贝num个字符到arr2中,最后返回arr2的地址
在这里插入图片描述
代码:

//strncpy的模拟实现
char* my_strncpy(char* dest, const char* src, size_t num, int len)
{
	char* ret = dest;
	assert(dest && src);
	//当要拷贝的字符数量num小于字符个数len
	if(len >= num)
	{
		while (num--)
		{
			*dest++ = *src++;
		}
	}
	//当要拷贝的字符数量num大于字符个数len
	else
	{
		while (len--)
		{
			*dest++ = *src++;
			num--;
		}
		for (int i = 0; i < num; i++)
		{
			*dest = '\0';
			dest++;
		}
	}
	return ret;
}
int main()
{
	char arr1[10] = "abcde";
	char arr2[20] = "********************";
	int len = strlen(arr1);
	my_strncpy(arr2, arr1, 10, len);
	printf("%s\n", arr2);
	return 0;
}

二、strncat

1、strncat的使用

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

• 将source指向字符串的前num个字符追加到destination指向的字符串末尾,再追加一个\0 字符
• 如果source指向的字符串的字符个数小于num,,只会将字符串中到\0 的内容追加到destination指向的字符串末尾

代码:

//strncat
int main()
{
	char arr1[20] = "*****";
	char arr2[10] = "abcde";
	strncat(arr1, arr2, 3);
	return 0;
}

在这里插入图片描述

2、strncat的模拟实现

从arr2中取出num个字符拼接到arr1的后面,最后返回arr1的地址
在这里插入图片描述

代码:

//strncat的模拟实现
char* my_strncat(char* dest, const char* src, size_t num, int len)
{
	char* ret = dest;
	assert(dest && src);
	//遍历找到\0
	while (*dest != '\0')
	{
		dest++;
	}
	//当要拼接的字符个数num <= len
	if (num <= len)
	{
		while (num--)
		{
			*dest++ = *src++;
		}
	}
	//当要拼接的字符个数num > len
	else
	{
		while (*src != '\0')
		{
			*dest++ = *src++;
		}
		*dest = '\0';
	}
	return ret;
}
int main()
{
	char arr1[20] = "*****";
	char arr2[10] = "abcde";
	int len = sizeof(arr2) / sizeof(arr2[0]);
	my_strncat(arr1, arr2, 8, len);
	printf("%s\n", arr1);
	return 0;
}

三、strncmp

1、strncmp的使用

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

• 比较str1和str2的前num个字符,如果相等就继续往后比较,最多比较num个字母,如果提前发现不一样,就提前结束,大的字符所在的字符串大于另外一个。如果num个字符都相等,就是相等返回0;
• 当第一个字符串大于第二个字符串,返回一个大于0的数;
• 当第一个字符串小于第二个字符串,返回一个小于0的数;
• 当第一个字符串等于第二个字符串,返回0;
• 比较对应字符的大小,实际上就是比较对应字符的ASCII值的大小

代码:

//strncmp
int main()
{
	char str1[] = "abcdef";
	char str2[] = "abcdq";
	int ret = strncmp(str1, str2, 6);
	printf("%d\n", ret);
	return 0;
}

运行结果:
在这里插入图片描述
结果小于0,说明第一个字符串小于第二个字符串

2、strncmp的模拟实现

在这里插入图片描述

代码:

//strncmp的模拟实现
int my_strncmp(const char* p1, const char* p2, size_t num)
{
	assert(p1 && p2);
	//对应位置比较,相等指针向后移动,直到对应位置不相等
	while (num-- && *p1 && *p2)
	{
		//判断
		if (*p1 > *p2)
		{
			return 1;
		}
		if (*p1 < *p2)
		{
			return -1;
		}
		p1++;
		p2++;
	}
	return 0;
}
int main()
{
	char str1[] = "abcdgf";
	char str2[] = "abcdq";
	int ret = my_strncmp(str1, str2, 5);
	printf("%d\n", ret);
	return 0;
}

四、strstr

1、strstr的使用

char * strstr ( const char * str1, const char * str2);

• 函数返回字符串str2在字符串str1中第一次出现的位置
• 字符串的比较匹配不包含\0 字符,以\0 作为结束标

代码:

//strstr
int main()
{
	char str1[] = "abcdefabdeg";
	char str2[] = "deg";
	char* ret = strstr(str1, str2);
	if (ret == NULL)
	{
		printf("不存在\n");
	}
	else
	{
		printf("%s\n", ret);
	}
	return 0;
}

代码实现结果:
在这里插入图片描述

2、strstr的模拟实现

在这里插入图片描述

代码:

//strstr的模拟实现
char* my_strstr(const char* str1, const char* str2)
{
	assert(str1 && str2);
	const char* s1 = NULL;
	const char* s2 = NULL;
	const char* cur = str1;
	if (*str2 == '\0')
	{
		return str1;
	}
	while (*cur)
	{
		s1 = cur;
		s2 = str2;
		while (*s1 && *s2 && *s1 == *s2)
		{
			s1++;
			s2++;
		}
		if (*s2 == '\0')
		{
			return cur;
		}
		cur++;
	}
	return NULL;
}

int main()
{
	char str1[] = "abcdefabdeg";
	char str2[] = "deg";
	char* ret = my_strstr(str1, str2);
	if (ret == NULL)
	{
		printf("不存在\n");
	}
	else
	{
		printf("%s\n", ret);
	}
	return 0;
}

这类问题画图可以很好的帮助理解!

以上就是关于字符串函数的全部内容啦!
如果有收获的话点个赞鼓励鼓励吧!
发现任何问题或者有疑问欢迎私信联系一起探讨!
在这里插入图片描述

标签:return,int,str2,通俗易懂,C语言,char,num,字符串,第二篇
From: https://blog.csdn.net/Origin_life/article/details/139379660

相关文章

  • C语言 | 找出单身狗2代码实现【全网最详细】
    找出单身狗2的代码实现一、单身狗1代码回顾1.1题目1.2代码实现思路1.3代码实现:二.单身狗22.1题目2.2代码实现的大思路2.3分组的具体步骤2.4代码的实现一、单身狗1代码回顾1.1题目有一个数组只有一个数字出现一次,其余数字都是成对出现的编写一个函数找......
  • static 在c语言中的价值
    1.概要static在c语言中的价值。static还有一个在文件内部使用有效的限制。如果在函数的外部,被static修饰的变量或者函数,是不可以在文件外部访问的,也就是说不同的文件中,被static修饰的函数或者变量是可以重名的。static的这个特性,在c++中显得有些鸡肋,但在c中的价值却很大,几......
  • TCP通信——基于C语言连接
    设计两个程序分别作为服务器和客户端,互相进行连接服务器/*************************************************************************************************************************** filename: tcp_server.c* author :Dazz* date :2024/6/5* functio......
  • 完全指南:C语言学习资源汇总
    C语言是编程学习的基石,无论是为了职业发展还是个人兴趣,掌握C语言都是技术生涯的重要一步。为了帮助初学者和有经验的程序员更好地学习和深化对C语言的理解,我们汇总了一系列优秀的书籍和在线资源。这些资源将帮助你从基础知识到高级概念,全面掌握C语言。推荐书籍1.《C语言入门......
  • C语言数据结构实现-单链表表基本操作
    链表插入元素同顺序表一样,向链表中增添元素,根据添加位置不同,可分为以下3种情况:插入到链表的头部(头节点之后),作为首元节点;插入到链表中间的某个位置;插入到链表的最末端,作为链表中最后一个数据元素;虽然新元素的插入位置不固定,但是链表插入元素的思想是固定的,只需做以下两步操......
  • 成员推理攻击(Membership Inference Attacks Against Machine Learning Models)通俗易懂
    成员推理攻击是一种面向AI模型的数据隐私窃取,攻击者以判断==数据是否来源于AI模型的训练集==为目标,本质上是对未知来源的数据进行==二分类==,给出成员数据或者非成员数据的判定。攻击者训练一个二分类器,该分类器将==目标分类器==预测的数据样本的置信度分数向量作为输入,预测该......
  • 基于调用C语言作为reference_model的UVM对全加器的验证
    代码来自于,本篇文章只对其中的细节做探讨UVM的基本教程-CSDN博客首先DUT为加法器,但是舒服不仅是加数和被加数,还有ready和valid,输出也不止是和,还有valid和ready。valid代表数据有效,ready表示已经准备好发送或者接收。加法器的设计语言中,共有三个状态,INITIAL/WAIT/SEND,rst为1......
  • <网络安全VIP>第二篇《工业控制软件》
    1PLCPLC,(ProgrammableLogicController),可编程逻辑控制器(PLC)是种专门为在工业环境下应用而设计的数字运算操作电子系统。2DCS四、DCS的发展趋势一、DCS的基本定义DCS是分布式控制系统(DistributedControlSystem)的英文缩写,在国内自控行业又称之为集散控制系统。DCS控......
  • 最大似然估计的求解步骤(详细解释,通俗易懂)
          关于最大似然估计的定义我已经分享过啦,小伙伴们可以通过下面的链接看看 什么是最大似然估计?1.求解步骤        今天我们来说一下它的求解步骤(这里的求解过程是以离散型随机变量为例,连续型随机变量同理)。在上文中我们知道,离散型随机变量的似然函数为......
  • 基于c语言的UDP客户端、服务端二合一基础代码
    基于c语言的UDP客户端、服务端二合一基础代码示意图:准备好了吗,以下是基础代码:/****************************************************************************************************************************************字节序:数据以字节流的方式进行传输,底层都是......