常见字符串函数的使用,你确定不进来看看吗?

news2024/11/26 8:32:51

在这里插入图片描述

👦个人主页:@Weraphael
✍🏻作者简介:目前是C语言学习者
✈️专栏:C语言航路
🐋 希望大家多多支持,咱一起进步!😁
如果文章对你有帮助的话
欢迎 评论💬 点赞👍🏻 收藏 📂 加关


前言

  1. ​以下所以库函数的查阅都在cplusplus网站
  2. 以下字符串函数在使用前都要加上#include <string.h>

目录

  • 前言
    • 1.strlen
        • (1)strlen函数介绍
        • (2)strlen函数用法
        • (3)strlen函数的注意事项
        • (4)strlen函数的模拟实现(三种)
    • 2.strcpy
        • (1)strcpy函数介绍
        • (2)strcpy函数用法
        • (3)strcpy函数的注意事项
        • (4)strcpy函数的模拟实现
    • 3.strcat
        • (1)strcat函数介绍
        • (2)strcat函数用法
        • (3)strcat函数的注意事项
        • (4)strcat函数的模拟实现
    • 4.strcmp
        • (1)strcmp函数介绍
        • (2)strcmp函数用法
        • (3)strcmp函数的模拟实现
    • 5.strncpy
        • (1)strncpy函数介绍
        • (2)strncpy函数用法
        • (3)strncpy函数的注意事项
        • (4)strncpy函数的模拟实现
    • 6.strncat
        • (2)strncat函数用法
        • (3)strncat函数的注意事项
        • (4)strncat函数的模拟实现
    • 7.strncmp
        • (1)strncmp函数介绍
        • (2)strncmp函数用法
    • 8.strstr
        • (2)strstr函数用法
        • (3)strstr函数的模拟实现
    • 9.strtok
        • strtok函数介绍及用法
    • 10.strerror
        • (1)strerror函数介绍
        • (2)strerror的用途
        • (3) 类似函数perror

1.strlen

(1)strlen函数介绍

功能:计算的是字符串中’\0’前面出现的字符个数(不包含’\0’)

​​​​​在这里插入图片描述

(2)strlen函数用法

在这里插入图片描述

(3)strlen函数的注意事项

  1. 参数指向的字符串必须要以’\0’结束
  2. 注意函数的返回值是size_t,是无符号的;因为字符串的长度不可能为负数
    在这里插入图片描述

(4)strlen函数的模拟实现(三种)

①计数器count
​​​​在这里插入图片描述
②递归法

​详细解析请参考《递归篇》 点我跳转

在这里插入图片描述
③指针 - 指针

​详情解析请参考《初识指针》点我跳转

在这里插入图片描述

2.strcpy

(1)strcpy函数介绍

功能:拷贝字符串

在这里插入图片描述

(2)strcpy函数用法

在这里插入图片描述

(3)strcpy函数的注意事项

  1. 源字符串必须以‘\0’结束
  2. 目标空间必须足够大,以确保能放下源字符串
  3. 目标空间必须可变,不能用const修饰

(4)strcpy函数的模拟实现

在这里插入图片描述

3.strcat

(1)strcat函数介绍

功能:在字符串后追加字符串

在这里插入图片描述

(2)strcat函数用法

在这里插入图片描述

(3)strcat函数的注意事项

  1. 源字符串必须以‘\0’结束
  2. 目标空间必须要以’\0’结束
  3. 目标空间必须足够大,能容纳源字符串的内容
  4. 保证目标空间可修改,不能加const修饰
  5. strcat不能自己给自己追加
    解释:
    字符串追加是从目标空间的’\0’开始追加的,追加时会把’\0’覆盖掉,这样字符串就没有结束标志,导致覆盖\0后,源字符串没有以\0结尾,导致死循环
    在这里插入图片描述

(4)strcat函数的模拟实现

在这里插入图片描述

4.strcmp

(1)strcmp函数介绍

功能:比较字符串大小(字典序)

在这里插入图片描述

(2)strcmp函数用法

在这里插入图片描述

(3)strcmp函数的模拟实现

在这里插入图片描述

5.strncpy

(1)strncpy函数介绍

  • strncpy与strcpy的功能相同,都是拷贝字符串
  • 不同的是:strncpy可以控制拷贝字符串的长度

在这里插入图片描述

(2)strncpy函数用法

在这里插入图片描述

(3)strncpy函数的注意事项

  1. 因为受拷贝长度限制,strncpy不会拷贝源字符串的’\0’(看用法),而strcpy会拷贝源字符的’\0’
  2. 如果源字符串的长度小于num,则拷贝完源字符串之后,它会在目标空间后面自动追加’\0’,直到num个
    在这里插入图片描述

(4)strncpy函数的模拟实现

在这里插入图片描述

6.strncat

  • strncat与strcat的功能相同,都是字符串追加
  • 不同的是:strncat可以=控制拷贝字符串的长度

在这里插入图片描述

(2)strncat函数用法

在这里插入图片描述

(3)strncat函数的注意事项

  1. strncat在目标字符数组追加完之后会自动补’\0’,所以它可以自己追加自己
    在这里插入图片描述

(4)strncat函数的模拟实现

在这里插入图片描述

7.strncmp

(1)strncmp函数介绍

  • 与strcmp的功能相同,都是字符串比较
  • 不同的是:strncmp可以控制字符串比较的长度

在这里插入图片描述

(2)strncmp函数用法

在这里插入图片描述

8.strstr

功能:从str1中找str2(找子串)

在这里插入图片描述

(2)strstr函数用法

在这里插入图片描述

(3)strstr函数的模拟实现

【分析】
情况1:
在这里插入图片描述
情况2:
在这里插入图片描述
【代码实现】

#include <stdio.h>
#include <string.h>
char* my_strstr(const char* str1, const char* str2)
{
	//当str2为空串,直接返回str1的地址
	if (*str2 == '\0')
	{
		return str1;
	}
    //用s1和s2代替str1和str2来遍历
	const char* s1 = str1;
	const char* s2 = str2;
    //p记录str1的位置
	const char* p = str1;
	while (*p)
	{
		s1 = p;
		s2 = str2;
		while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
		{
			s1++;
			s2++;
		}
        //*s2=\0,说明找到子串了
		if (*s2 == '\0')
		{
			return p;
		}
        //循环中s1和s2不相等,让p++找下一个位置
		p++;
	}
	//当*p = ‘\0’,说明p遍历完整个数组都没找到子串
	return NULL;
}
int main()
{
	char arr1[] = "abbbbcdef";
	char arr2[] = "\0";
	char* res = my_strstr(arr1, arr2);//从arr1中找arr2
	if (res == NULL)
	{
		printf("找不到\n");
	}
	else
	{
		printf("找到了:%s\n", res);
	}
	
	return 0;
}

9.strtok

strtok函数介绍及用法

功能:分割字符串

在这里插入图片描述
【解析】

  • 如上图,delimiters参数是一个字符串,它是分割符的字符集合
  • str是被切割的字符串,不能用const修饰
  • 函数返回类型是char*

strtok的作用

  1. strtok找到str中的分割符,并把分割符变成\0,再返回一个指向这个标记的起始地址
    在这里插入图片描述
  2. ①strtok函数的第一个参数不为 NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置。
    ②strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记。
    在这里插入图片描述
    【完整版】
    在这里插入图片描述

10.strerror

(1)strerror函数介绍

功能:返回错误码所对应的错误信息

  • C语言的库函数在运行的时候,如果发生错误,就会将错误码存在一个全局变量,这个变量是errno
    这些错误码通常是一些数字:1,2,3,4,5…
    在这里插入图片描述

在这里插入图片描述

(2)strerror的用途

  • fopen函数简介在这里插入图片描述

【用法实现】

在这里插入图片描述

(3) 类似函数perror

功能:直接打印错误信息,在打印错误信息前,会先打印自定义的信息
在这里插入图片描述

【用法展现】
在这里插入图片描述

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

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

相关文章

2023年最强大的12款数据可视化工具,值得收藏

做数据分析也有年头了&#xff0c;好的坏的工具都用过&#xff0c;推荐几个觉得很好用的&#xff0c;避坑必看&#xff01; PS&#xff1a;一般比较成熟的公司里&#xff0c;数据分析工具不只是满足业务分析和报表制作&#xff0c;像我现在给我们公司选型BI工具&#xff0c;是做…

差分模拟信号转单端输出电路设计

需求分析&#xff1a; 1.差分输入0~16V -Vpp电压量&#xff1b; 2.输入频率0~1.2KHz&#xff1b; 3.单端对应输出0~3V的模拟量&#xff1b; 4.输出频率对应0~1.2KHz&#xff1b; 5.供电范围3~5V。 针对以上需求&#xff0c;设计如下图所示电路。 1.电路功能&#xff1a; …

Spring为什么这么火 之 Bean的6种作用域和Bean的生命周期

1、Bean的作用域 1.1、什么是作用域&#xff1f; 限定程序中变量的可用范围叫做作用域&#xff0c;或者说在源代码中定义变量的某个区域就叫做作用域 1.2、Bean的6种作用域 singleton&#xff1a;单例作用域prototype&#xff1a;原型作用域【多例作用域】request&#xff1…

Flowable进阶学习(九)数据对象DataObject、租户Tenant、接收任务ReceiveTask

文章目录一、数据对象DataObject二、租户 Tenant三、接收任务 ReceiveTask案例一、数据对象DataObject DataObject可以⽤来定义⼀些流程的全局属性。 绘制流程图&#xff0c;并配置数据对象&#xff08;不需要选择任意节点&#xff09; 2. 编码与测试 /*** 部署流程*/ Test…

C++类和对象(中)

✨个人主页&#xff1a; Yohifo &#x1f389;所属专栏&#xff1a; C修行之路 &#x1f38a;每篇一句&#xff1a; 图片来源 I do not believe in taking the right decision. I take a decision and make it right. 我不相信什么正确的决定。我都是先做决定&#xff0c;然后把…

java二叉排序树

1.先看一个需求 给你一个数列 (7, 3, 10, 12, 5, 1, 9)&#xff0c;要求能够高效的完成对数据的查询和添加 2.解决方案分析 使用数组 数组未排序&#xff0c; 优点&#xff1a;直接在数组尾添加&#xff0c;速度快。 缺点&#xff1a;查找速度慢. [示意图] 数组排序&#xf…

车道线检测-PolyLaneNet 论文学习笔记

论文&#xff1a;《PolyLaneNet: Lane Estimation via Deep Polynomial Regression》代码&#xff1a;https://github.com/lucastabelini/PolyLaneNet地址&#xff1a;https://arxiv.org/pdf/2004.10924.pdf参考&#xff1a;https://blog.csdn.net/sinat_17456165/article/deta…

Java中的clone方法

注解定义&#xff1a; 注解是一种注释机制&#xff0c;它可以注释包、类、方法、变量、参数&#xff0c;在编译器生成类文件时&#xff0c;标注可以被嵌入到字节码中。注解的分类&#xff1a;内置注解Override :重写方法&#xff0c;引用时没有该方法时会编译错误public class …

使用 ThreeJS 实现第一个三维场景(详)

文章目录参考描述index.html三维场景的基本实现导入 ThreeJS准备工作场景摄像机视锥体正交摄像机透视摄像机渲染器后续处理将摄像机添加至场景中移动摄像机设置画布尺寸将渲染器创建的画布添加到 HTML 元素中渲染物体结构材质合成将物体添加至场景中代码总汇执行效果动画reques…

Python基础及函数解读(深度学习)

一、语句1.加注释单行注释&#xff1a;&#xff08;1&#xff09;在代码上面加注释&#xff1a; # 后面跟一个空格&#xff08;2&#xff09;在代码后面加注释&#xff1a;和代码相距两个空格&#xff0c; # 后面再跟一个空格多行注释&#xff1a;按住shift 点击三次"&am…

蓝桥杯刷题023——机器人塔(DFS)

2016国赛 题目描述 X 星球的机器人表演拉拉队有两种服装&#xff0c;A 和 B。 他们这次表演的是搭机器人塔。 类似&#xff1a; A B B A B A A A B B B B B A B A B A B B A 队内的组塔规则是&#xff1a; A 只能站在 AA 或 BB 的肩上。 B 只能站在 AB 或 BA 的肩上。 你的任务…

擎创动态 | 定了!建设银行首批生态合作伙伴

1月31日&#xff0c;建设银行以“云行金融之道&#xff0c;建可信未来”为主题在北京举办“建行云”发布会&#xff0c;首批推出三大类10个云服务套餐&#xff0c;为行业提供一站式解决方案。发布会上&#xff0c;建设银行推出“云霄”生态合作计划并公布首批39家“建行云”生态…

基于vue-admin-element开发后台管理系统【技术点整理】

一、Vue点击跳转外部链接 点击重新打开一个页面窗口&#xff0c;不覆盖当前的页面 window.open(https://www.baidu.com,"_blank")"_blank" 新打开一个窗口"_self" 覆盖当前的窗口例如&#xff1a;导入用户模板下载 templateDownload() {wi…

化繁为简|中信建投基于StarRocks构建统一查询服务平台

近年来&#xff0c;在证券服务逐渐互联网化&#xff0c;以及券商牌照红利逐渐消退的行业背景下&#xff0c;中信建投不断加大对数字化的投入&#xff0c;尤其重视数据基础设施的建设&#xff0c;期望在客户服务、经营管理等多方面由经验依赖向数据驱动转变&#xff0c;从而提高…

面试阿里测开岗,面试官说我不配24K,当场拍桌子翻脸....

好家伙&#xff0c;这奇葩事可真是多&#xff0c;前两天和粉丝聊天&#xff0c;他说前段时间面试阿里的测开岗&#xff0c;最后和面试官干起来了。 我问他为什么&#xff0c;他说没啥&#xff0c;就觉得面试官太装了&#xff0c;我说要24K&#xff0c;他说太高了&#xff0c;说…

中国区注册OpenAI账号试用ChatGPT指南

OpenAI最近推出ChatGPT&#xff0c;但国内&#xff08;包括香港&#xff09;并不支持OpenAI账号注册&#xff0c;多数会提示&#xff1a; OpenAI’s services are not available in your country. 前期准备 科学上网&#xff0c;最好是美国IP&#xff08;可以购买v屁n&#xf…

章鱼哥听歌

uboot环境变量 以下所有的命令&#xff0c;都在串口工具进行执行 ubifsmount- mount UBIFS volume ubifsumount- unmount UBIFS volume ums - Use the UMS [USB Mass Storage] usb - USB sub-system usbboot - boot from USB device version - print monit…

EasyX精准帧率控制打气球小游戏

&#x1f386;音乐分享 New Boy —— 房东的猫 之前都用Sleep&#xff08;&#xff09;来控制画面帧率&#xff0c;忽略了绘制画面的时间 如果绘制画面需要很长的时间&#xff0c;那么就不能忽略了。 并且Sleep&#xff08;&#xff09;函数也不是特别准确&#xff0c;那么就…

day3——有关java运算符的笔记

今天主要学习的内容有java的运算符 赋值运算符算数运算符关系运算符逻辑运算符位运算符&#xff08;专门写一篇笔记&#xff09;条件运算符运算符的优先级流程控制 赋值运算符 赋值运算符&#xff08;&#xff09;主要用于给变量赋值&#xff0c;可以跟算数运算符相结合&…

【✨十五天搞定电工基础】基本放大电路

本章要求1. 理解放大电路的放大作用和共发射极放大电路的性能特点&#xff1b; 2. 掌握静态工作点的估算方法和放大电路的微变等效电路分析法&#xff1b; 3. 了解放大电路输入、输出电阻和电压放大倍数的计算方法&#xff0c;了解放大电路的频率特性、 互补功率放大…