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

news2024/11/25 12:55:23

目录

补上章缺失的两道题

七.笔试题(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

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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1029528.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

新建excel出现由于找不到vcruntime140_1.dll,无法继续执行代码。系统错误

打开excel报错&#xff0c;提示缺少​​vcruntime140_1D.dll​​。 那解决方法无疑就是找到这个​​DLL​​​&#xff0c;然后放到电脑系统中。 在网站​中搜索​vcruntime140_1.dll&#xff0c;下载 把你下载的文件放到系统中&#xff0c;把dll文件放到​​C:\Windows\Syst…

2、Window上的虚拟机暴露到宿主机局域网教程

今天在公司的服务器主机上捣鼓虚拟机&#xff0c;要在虚拟机上安装一个oracle&#xff0c;虚拟机和主机能互相ping通的前提下&#xff0c;要将虚拟机上的端口号暴露在主机上&#xff0c;让项目组内的所有员工的电脑都能访问到该oracle数据库。 也就是电脑A 访问主机&#xff0…

1997-2023年1月中国企业跨国并购数据Zephyr数据库

1997-2023年1月中国企业跨国并购数据 1、时间&#xff1a;1997-2023年1月 2、来源&#xff1a;根据Zephyr数据库整理形成 3、样本量&#xff1a;3.6万 4、指标&#xff1a;变量信息全面&#xff0c;包括交易的详细时间、金额、标的、介绍、行业等等具体如下&#xff1a; D…

再也不怕面试官拷打Go数据结构了!-Go语言map详解

map是Go语言中的哈希表&#xff0c;用来存储key/value键值对。可以在O(1)的时间复杂度内进行查找。map是Go语言在面试中经常会被问到的一个点&#xff0c;这篇文章就来细细梳理一下map的相关知识点&#xff0c;面试不再怕&#xff0c;offer顶呱呱。 哈希冲突 我们知道&#x…

【每日一题】74. 搜索二维矩阵

74. 搜索二维矩阵 - 力扣&#xff08;LeetCode&#xff09; 给你一个满足下述两条属性的 m x n 整数矩阵&#xff1a; 每行中的整数从左到右按非递减顺序排列。每行的第一个整数大于前一行的最后一个整数。 给你一个整数 target &#xff0c;如果 target 在矩阵中&#xff0c;返…

探索 Java JDK 21 的新特性:一场深度解析之旅

探索 Java JDK 21 的新特性&#xff1a;一场深度解析之旅 探索 Java JDK 21 的新特性&#xff1a;一场深度解析之旅摘要 &#x1f680;引言 &#x1f310;正文 &#x1f4da;新特性概览 &#x1f195;1. 模式匹配的魅力 &#x1f9e9;2. 记录类型&#xff1a;轻松管理数据 &…

【深度学习】ONNX模型多线程快速部署【基础】

【深度学习】ONNX模型CPU多线程快速部署【基础】 提示:博主取舍了很多大佬的博文并亲测有效,分享笔记邀大家共同学习讨论 文章目录 【深度学习】ONNX模型CPU多线程快速部署【基础】前言搭建打包环境python多线程并发简单教程基本教程ONNX模型多线程并发 打包成可执行文件总结 前…

王道考研计算机组成原理

王道考研计算机组成原理 计算机系统概述计算机系统层次结构计算机的性能指标错题 数据的表示和运算数制与编码运算方法和运算电路浮点数的表示与运算 存储系统存储器概述主存储器主存储器与CPU的连接外部存储器高速缓冲存储器虚拟存储器 指令系统指令格式指令的寻址方式程序的机…

js加密双重保障之sm2国密

前言 ​ 最近看到一些项目里边有用到sm2/3/4国密加密算法&#xff0c;这里给大家简单介绍一下。 知识科普 SM2&#xff08;国密算法&#xff09;是一种非对称加密算法&#xff0c;由中国国家密码管理局&#xff08;NCC&#xff09;制定&#xff0c;并被广泛应用于中国的信息…

9月21日作业

登录代码&#xff1a; widget.h #ifndef REGISTER_H #define REGISTER_H#include <QWidget> #include <QDebug> #include <QSqlDatabase> #include <QSqlQuery> #include <QMessageBox>namespace Ui { class Register; }class Register : publ…

selenium自动化测试-获取动态页面小说

有的网站页面是动态加载的资源&#xff0c;使用bs4库只能获取静态页面内容&#xff0c;无法获取动态页面内容&#xff0c;通过selenium自动化测试工具可以获取动态页面内容。 参考之前的"bs4库爬取小说工具"文章代码&#xff0c;稍微修改下&#xff0c;就可以转成获…

9.21号作业

实现把注册的信息导入数据库中 second.h #ifndef SECOND_H #define SECOND_H#include <QWidget> #include <QDebug> namespace Ui { class Second; }class Second : public QWidget {Q_OBJECT public:void newslot(); public:explicit Second(QWidget *parent n…

机器学习西瓜书+南瓜书吃瓜教程学习笔记第四章决策树

1、算法原理 从逻辑角度&#xff0c;一堆if else语句的组合 从集合角度&#xff0c;根据某种准则划分特征空间 最终目的&#xff1a;将样本越分越“纯” 决策树是基于树结构来进行决策的 例如&#xff0c;我们对“这是好瓜吗&#xff1f;”这样的问题进行决策时&#xff0c;通…

QTC++ day12

注册登录界面 widget.h #ifndef WIDGET_H #define WIDGET_H#include <QWidget> #include <QIcon> #include <QPushButton> #include <QLineEdit> #include <QLabel> #include <QDebug> #include <QMessageBox>//消息对话框类 #inc…

tracert 路由追踪原理

一、概念 就是利用ICMP(Internet Control Message Protocol)Internet控制报文协议 来追踪的计算机到目标计算机之间的所有路由器信息 二、不同平台下命令方式 windows下&#xff1a; tracert www.baidu.comlinux下 traceroute www.baidu.com 三、基于方式 UDP(user datagram pr…

【建议收藏】5个神级AI提示词网站,让AI工具效率拉满

HI&#xff0c;同学们&#xff0c;我是赤辰&#xff0c;本期是赤辰第9篇AI工具类教程&#xff0c;文章底部准备了粉丝福利&#xff0c;看完可以领取&#xff01; 今天给大家推荐五款非常好玩的AI提示词资源网站&#xff0c;完全免费&#xff0c;无需魔法&#xff0c;直接复制粘…

DIY 一个汽车方向盘游戏外设(MMOS OSW DIY)

OSW-MMOS直驱方向盘DIY过程记录 - 简书 (jianshu.com) DIY 一个汽车方向盘游戏外设&#xff08;MMOS OSW DIY&#xff09; 首先讲一下这个直驱系统大概的框架&#xff0c;首先是电脑&#xff0c;电脑里装MMOS的软件(这个软件国内高手把它汉化了的)&#xff0c;电脑通过USB线&a…

行业首款数字牙刷 F10 系列:笑容加带来的智能刷牙革命

&#x1f337;&#x1f341; 博主猫头虎 带您 Go to New World.✨&#x1f341; &#x1f984; 博客首页——猫头虎的博客&#x1f390; &#x1f433;《面试题大全专栏》 文章图文并茂&#x1f995;生动形象&#x1f996;简单易学&#xff01;欢迎大家来踩踩~&#x1f33a; &a…

为什么tomcat要自定义线程池实现?

背景 最近在研究tomcat调优的问题&#xff0c;开发人员做过的最多的tomcat调优想必就是线程池调优了&#xff0c;但是tomcat并没有使用jdk自己的线程池实现&#xff0c;而是自定了了线程池&#xff0c;自己实现了ThreadPoolExecutor类位于org.apache.tomcat.util.threads包下 …