字符串函数----篇章(1)

2023-09-21 20:41:13

目录

补上章缺失的两道题

七.笔试题(7)

八.笔试题(8)

一.字符串函数 ( 1 )----strlen函数

二.字符串函数 ( 2 )----strcpy函数

2-1模拟实现strcpy

三.字符串函数 ( 3 )----strcmp函数

​编辑

 3-1模拟实现strcmp

四.字符串函数 ( 4 )----strcat函数

​编辑

 4-1模拟实现strcat


猫猫跟你说,每天进步一点点,在未来的某一天,一定会看到见到!!

人只有坚持把自己变好,就真的会越来越好!!

补上章缺失的两道题

七.笔试题(7)

#include <stdio.h>
//阿里的笔试题
int main()
{
	char* a[] = { "work","at","alibaba" };
	char** pa = a;
	pa++;
	printf("%s\n", *pa);
	return 0;
}

如上图,a是一个字符指针数组,*a指向的是数组首元素地址,因为 **pa=a,所以将数组首元素地址传递给二级指针 pa ,接着pa++,就是第二个字符指针的地址

在printfh中对pa进行了一次解引用就是a的第二个元素,也就是at,用%s打印就是at

八.笔试题(8)

    

int main()
{
	char* c[] = { "ENTER","NEW","POINT","FIRST" };
	char** cp[] = { c + 3,c + 2,c + 1,c };
	char*** cpp = cp;

	printf("%s\n", **++cpp);
	printf("%s\n", *-- * ++cpp + 3);
	printf("%s\n", *cpp[-2] + 3);
	printf("%s\n", cpp[-1][-1] + 1);
	return 0;
}

如图所示,c对应的是字符指针数组,cp对应的是*c,,上图紫色线表示cp所对应的元素,*cpp=cp,*cpp对应的是首元素地址元素,c+3

printf("%s\n", **++cpp);

cpp++ 对应的是 c+2 , *cpp为cp,*cp对应的是c,所以** ++cpp按照%s打印为 POINT

printf("%s\n", *-- * ++cpp + 3);
注意,这个++cpp是在上一个printf的基础上进行的,*(cpp++)就是c+1,如左图* -- *++cpp所对应的就是ENTER,在这个基础上 +3 对应的就是ER        


printf("%s\n", *cpp[-2] + 3); cpp[-2]也就等于cpp-2 ,(注意:cpp[-2]==cpp-2是固定的,一个是指针形式,一个是数组形式) *(cpp-2)对应的是c+3,再进行解应用操作对应的就是FIRST, ​​​FIRST  + 3对应的就是ST


printf("%s\n", cpp[-1][-1] + 1);也就等于*(*(cpp-1)-1)+1,*(cpp-1)对应的是c+2,*(*(c+2)-1)就是NEW,在这个基础上+1就是E


指针笔试题还是很有难度的,大家还是要多看几遍,尽量理解透彻!!!!!!!!

下面进入本章正题

一.字符串函数 ( 1 )----strlen函数

由于本字符串函数以前提过,博主在这里就不多做解释了 

二.字符串函数 ( 2 )----strcpy函数

通俗点说:strcpy函数就是将逗号后面(源数组)的字符串复制粘贴到逗号前面(目标数组)

注意:1.前面的数组 (目标数组)可能没有'\0',所以逗号后面的数组(源数组)必须有'\0'

           2.前面的数组(目标数组)的空间要足够大,保证能放下后面数组(源数组)的字符串

           3.前面的数组(目标数组)要可变

int main()
{
	char arr1[20] = {0};
	char arr2[] = "HELLO";

	strcpy(arr1, arr2);
	printf("%s\n", arr1);

	return 0;
}

打印出来是 HELLO 

就是将arr2中的HELLO拷贝到arr1中

2-1模拟实现strcpy

#include <assert.h>
//
//strcpy函数返回的是目标空间的起始地址
//
char* my_strcpy(char*dest, const char* src)
{
	char* ret = dest;
	assert(dest && src);

	while (*dest++ = *src++)
	{
		;
	}
	return ret;
}

int main()
{
	char arr1[20] = { 0 };
	char arr2[] = "abc";
	/*
	my_strcpy(arr1, arr2);
	printf("%s\n", arr1);
	*/
    //两种写法都可以
	printf("%s\n", my_strcpy(arr1, arr2));
	return 0;
}

三.字符串函数 ( 3 )----strcmp函数

stcmp函数用来比较两个字符串 

上面翻译的很详细,就不做多余的解释了

int main()
{
	char arr1[] = "abq";
	char arr2[] = "abc";
	if (strcmp(arr1, arr2) > 0)
	{
		printf(">\n");
	}
	else
	{
		printf("<=\n");
	}
	return 0;
}

 输出  >

 3-1模拟实现strcmp

int my_strcmp(const char* str1, const char* str2)
{
	assert(str1 && str2);

	while (*str1 == *str2)
	{
		if (*str1 == '\0')
			return 0;
		str1++;
		str2++;
	}
	return *str1 - *str2;
}

int main()
{
	char arr1[] = "abq";
	char arr2[] = "abc";
	if (my_strcmp(arr1, arr2) > 0)
	{
		printf(">\n");
	}
	else
	{
		printf("<=\n");
	}

	return 0;
}

 输出  >

四.字符串函数 ( 4 )----strcat函数

strcat函数用来追加字符串,将逗号后面的数组追加到逗号前面的末尾,从'\0'的位置开始追加

注意:1.逗号后面的数组(源数组)必须有'\0'

        2.前面的数组(目标数组)的空间要足够大,保证能放下后面数组(源数组)的字符串

        3.前面的数组(目标数组)要可变

int main()
{
	char arr1[20] = "abc";
	strcat(arr1, arr1);//strncat
	printf("%s\n", arr1);

	return 0;
}

 输出 abcabc

 4-1模拟实现strcat

//strcat函数,返回的是目标空间的起始地址
char* my_strcat(char* dest, const char* src)
{
	char* ret = dest;
	assert(dest && src);
	//1. 找到目标空间的末尾
	while (*dest != '\0')
	{
		dest++;
	}
	//2. 数据追加
	while (*dest++ = *src++)
	{
		;
	}
	return ret;
}

int main()
{
	char arr1[20] = "abc";
	char arr2[] = "def";
	my_strcat(arr1, arr2);
	printf("%s\n", arr1);

	return 0;
}

输出的是  abcdef

记得点个关注,要不然容易找不到!!!!

下一章继续更新字符串函数,敬请期待

如果有解释的不对或者不清晰,麻烦大佬们海涵,如果可以烦请从评论区指出,我一定会加以修改,万分感谢

最后麻烦大佬们动一下你们的小手一键三连,万分感谢

更多推荐

解释器模式简介

概念:解释器模式(InterpreterPattern)是一种行为型设计模式,它用于定义语言的文法,并解析和执行给定语言中的表达式。该模式将每个表达式表示为一个类,并提供了一种方式来组合这些表达式以实现复杂的语句。特点:定义了一种简单、可扩展的语法规则,使得可以灵活地处理不同类型的表达式。通过使用面向对象技术,可以方便

Linux环境安装开发grafana插件(一)试水

继续我们探索grafana结合Skywalking,为了更加灵活的应用图表,尝试开发grafana的panel插件,但试水并不顺利,所以把第一步目标缩小到安装一个自定义插件。参考了不少文章,终于成功,但各类参考要么比较碎片化,要么有些地方过时了,所以还是整合一下,对希望对大家节省时间有所帮助。环境:grafana+li

moment.js插件ios时间格式不兼容问题

项目背景uniapp开发中,考试模块的时间显示,因为每次进入考试都要重新计算开始的时间,因此使用moment.js十分方便,但要注意在ios系统中时间格式问题;moment.js使用步骤Moment.js是一个轻量级的JavaScript日期库,可以解析,验证,操作和格式化日期。1.安装npminstallmoment

Linux CentOS7 tree命令

tree就是树,是文件或文件名输出到控制台的一种显示形式。tree命令作用:以树状图列出目录的内容,包括文件、子目录及子目录中的文件和目录等。我们使用ll命令显示只能显示一个层级的普通文件和目录的名称。而使用tree则可以树的形式将指定目录下的普通文件和目录全部显示出来。相对于ll或者ls命令,tree就高效很多。一、

微信开放平台第三方开发,实现代小程序备案申请

大家好,我是小悟微信小程序备案整体流程总共分为五个环节:备案信息填写、平台初审、工信部短信核验、通管局审核和备案成功。服务商可以代小程序发起备案申请。在申请小程序备案之前,需要确保小程序基本信息已填写完成、小程序至少存在一个审核通过的类目。备案操作过程如下。将备案信息做成模板化管理,这样如果给其他同主体、同负责人等信息

《Playing repeated games with Large Language Models》全文翻译

《PlayingrepeatedgameswithLargeLanguageModels》-使用大型语言模型玩重复游戏论文信息摘要1.介绍2.相关工作3.一般方法4.分析不同游戏系列的行为5.囚徒困境5.1性别之战6.讨论论文信息题目:《PlayingrepeatedgameswithLargeLanguageMode

数据仓库介绍及应用场景

数据仓库(DataWarehouse)是一个用于存储、管理、检索和分析大量结构化数据的集中式数据库系统。与传统的事务处理数据库不同,数据仓库是为了支持决策支持系统(DecisionSupportSystems,DSS)和业务智能(BusinessIntelligence,BI)应用而设计的。数据仓库的核心概念事实表(F

mininum_snap

位置速度加速度====角度jerk=======角速度==========驱动力snap=====角加速度=========推力的导数凸优化算法convexoptimization凸优化(ConvexOptimization)是数学和计算机科学领域的一个重要分支,主要研究如何有效地解决凸优化问题。凸优化问题的主要目标是

LeetCode 接雨水 木桶理论、dp预处理

原题链接:力扣(LeetCode)官网-全球极客挚爱的技术成长平台题面:给定n个非负整数表示每个宽度为1的柱子的高度图,计算按此排列的柱子,下雨之后能接多少雨水。示例1:输入:height=[0,1,0,2,1,0,1,3,2,1,2,1]输出:6解释:上面是由数组[0,1,0,2,1,0,1,3,2,1,2,1]表示

一文搞定Postman(菜鸟必看)

什么是Postman?Postman是一个可扩展的API测试工具,可以快速集成到CI/CD管道中。它于2012年作为AbhinavAsthana的一个副项目启动,旨在简化测试和开发中的API工作流程。API代表应用程序编程接口,它允许软件应用程序通过API调用相互通信。为什么使用Postman?如今,Postman软件

微软推出统一 Copilot AI 助手;谷歌拟自主研发 AI 芯片;苹果拟在国内引进新的 OLED 供应商丨RTE开发者日报 Vol.55

开发者朋友们大家好:这里是「RTE开发者日报」,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享RTE(RealTimeEngagement)领域内「有话题的新闻」、「有态度的观点」、「有意思的数据」、「有思考的文章」、「有看点的会议」,但内容仅代表编辑的个人观点,欢迎大家留言、跟帖、讨论。本期编辑:@Asu

热文推荐