当前位置: 首页 > news >正文

C语言(字符串函数)

 

这章的内容记得引用<string.h>头文件

目录

1.strlen()

2.strcat()

3.strncat()

4.strcmp()

5.strncmp()

6.strcpy()

7.strncpy()

8.sprintf()

8.strchr()

9.strpbrk()

10.strrchr()

11.strstr()

1.strlen()

用于统计字符串的长度(不包含末尾的空字符)

size_t strlen(const char * s);

该函数返回s字符串中的字符数,不包括末尾的空字符

2.strcat()

用于拼接字符串。该函数把第二个字符串的备份附加在第一个字符串末尾,并把拼接后形成的新字符串作为第一个字符串,第二个字符串不变。

char *strcat(char * restrict s1,const char * restrict s2);

该函数把s2指向的字符串拷贝至s1指向的字符串末尾。S2字符串的第一个字符将覆盖s1字符串末尾的空字符。该函数返回s1

3.strncat()

char *strcat(char * restrict s1,const char * restrict s2,size_t n);

该函数把s2字符串中的n个字符拷贝至s1字符串末尾。S2字符串的第一个字符将覆盖s1字符串末尾的空字符

strcat()函数无法检查第一个数组是否能容纳第二个字符串,如果分配给第一个数组的空间不够大,多出来的字符溢出到相邻存储单元时就会出问题,而strncat()会在strcat()的基础上,多添加了第三个参数,进行拷贝字符数量限制

比如

4.strcmp()

int strcmp(const char * s1,const char * s2);

进行字符串作比较,第一个参数和第二个参数字符串参数相同,返回0。如果在字母表中第一个字符串为主第二个字符串前面(ASCII码),返回负数(相当于 第二个参数 - 第一个参数),反之则为正.返回类型都是1或-1

5.strncmp()

int strcmp(const char * s1,const char * s2,size_t n);

该函数的作用和strcmp()类似,不同的是,该函数在比较n个字符后或遇到第一个空字符停止

strcmp()函数 比较的是字符串,不是字符,所以比如“Apples”和”Ac“。如果第一个元素相同,则比较第二个元素

对于strcmp()函数我们的关注点只需要看在它的值是否是零和非零就可以了

不相等返回的就是-1或1

6.strcpy()

char *strcpy(char * restrict s1,const char * restrict s2);

该函数把s2指向的字符串(包括空字符)拷贝至s1指向的位置,返回值是s1

将第二个参数的字符拷贝,到第一个参数中。第一个参数叫目标字符串,第二个参数叫源字符串

strcpy()返回类型是 char *,该函数返回的是第一个参数的值(第一个字符的地址)

还有需要注意,strcpy()第一个参数不必指向数组的开始。下面我们在来看个例子

7.strncpy()

char *strcpy(char * restrict s1,const char * restrict s2,size_t n);

该函数把s2指向的字符串(包括空字符)拷贝至s1指向的位置,拷贝的字符数不超过n,返回值是s1。该函数不会拷贝空字符后面的字符,如果源字符串的字符少于n个,目标字符串就以拷贝的空字符结尾,但如果源字符串有n个或超过n个字符,就不会拷贝空字符

strcpy和strcat都有同样的问题,他们都不能检查目标空间是否能容纳源字符串的副本。而strncpy()的第三个参数指明可拷贝的最大字符数,

    while(i < LIM && s_gets(temp,SIZE))

    {

        if(temp[0] != 'q') printf("%s doesn't begin with q!\n",temp);

        else{

            strncpy(qwords[i],temp,TARGSIZE-1);

            qwords[i][TARGSIZE-1] = '\0';

            i++;

        }

     }

我们重点讲解下这段代码,首先temp是个临时存储的字符串的变量,然后对这个变量进行判断,如果不是以q开头,提示错误,重新输入。只有当正确满5个以后才能推出while循环。

 strncpy(qwords[i],temp,TARGSIZE-1);

这行代码把temp拷贝到qwords,但只会拷贝6个字符,最后一个存储'\0'

qwords[i][TARGSIZE-1] = '\0';

 

8.sprintf()

int sprintf(char *buffer, const char *format, [argument]...)

这个函数声明在stdio.h。该函数和printf()类似,但是它把数据写入字符串,而不是打印到显示器上。因此,该函数可以把多个元素组合成一个字符串。Sprintf()第一个参数是目标字符串的地址,第二和第三和printf一样

在vs中使用sprintf和scanf记得开头要加个

#define        _CRT_SECURE_NO_WARNINGS

 

8.strchr()

Char *strchr(const char * s,int c);

如果s字符串包含c字符串,该函数返回指向s字符串首次出现的c字符的指针(末尾的空字符也字符串的一部分),如果找不到就返回空指针

 

9.strpbrk()

Char *strpbrk(const char * s1,const char * s2);

如果s1字符中包含s2字符串中的任意字符,该函数返回指向s1字符串首位置的指针,如果没找到,返回空字符

 

10.strrchr()

Char *strrchr(const char *s,char c);

该函数返回指向s字符串中c字符的最后一次出现的位置(末尾的空字符也是字符串的一部分)。如果未找到c字符,则返回空字串

 

 

11.strstr()

Char * strstr(const char * s1,const char * s2)

该函数返回指向s1字符串中s2字符串中首次出现的受位置,如果未找到,则返回空指针


好了朋友们我们今天的内容到这就结束了,今天的内容到这里就结束了,如果有啥不会的朋友记得论坛里面提问哈~

如果朋友你感觉文章的内容对你有帮助,可以点赞关注文章和专栏以及关注我哈,嘿嘿嘿我会定期更新文章的,谢谢朋友你的支持哈

 

 

 

 

 

 

相关文章:

C语言(字符串函数)

这章的内容记得引用<string.h>头文件 目录 1.strlen&#xff08;&#xff09; 2.strcat() 3.strncat() 4.strcmp() 5.strncmp() 6.strcpy() 7.strncpy() 8.sprintf() 8.strchr() 9.strpbrk() 10.strrchr() 11.strstr() 1.strlen&#xff08;&#xff09; 用于统计字符串的…...

Maxwell工作流程详解

要介绍maxwell的工作原理&#xff0c;首先需要讲一下mysql主从复制的原理 mysql主从复制原理&#xff1a; 如上图&#xff0c;左边是master主节点&#xff0c;右边是slave从节点 工作流程&#xff1a; 1.往主节点mysql的数据库中写入数据&#xff0c;产生数据变化&#xff0c…...

13- EM算法与GMM高斯混合 (聚类算法) (算法)

最大期望算法(EM算法) &#xff0c;曾入选“数据挖掘十大算法”中&#xff0c;是最常见的隐变量估计方法&#xff0c;在机器学习中有极为广泛的用途&#xff0c;例如常被用来学习高斯混合模型的参数。EM算法是在概率模型中寻找参数最大似然估计或者最大后验估计的算法&#xff…...

【新】华为OD机试 - 二叉树层次遍历(Python)| 刷完获取OD招聘渠道

二叉树层次遍历 题目 有一棵二叉树 每一个节点用一个大写字母标识 最多26个节点 现有两组字母 分别表示后序遍历(左孩子指向右孩子指向父节点) 和中序遍历(左孩子指向父节点指向右孩子) 请输出层次遍历的结果 输入 输入为两个字符串 分别为二叉树的后序遍历和中序遍历结…...

工作记录------@Accessors(chain = true)引起的BUG,Excel导入时获取不到值

工作记录------Accessors(chain true)引起的BUG&#xff0c;Excel导入时获取不到值 如题所示 背景&#xff1a;在进行文件excel文件导入时&#xff0c;发现实体类获取到的属性值都为null。 框架&#xff1a;com.alibaba.excel 2.2.0的版本。 结论&#xff1a;首先说下结论 如…...

JavaEE-HTTP协议(二)

目录HTTP请求的方法GET方法POST 方法其他方法“报头”User-AgentRefererCookieHTTP响应200 OK404 Not Found403 Forbidden405 Method Not Allowed500 Internal Server Error504 Gateway Timeout302 Move temporarily301 Moved PermanentlyHTTP请求的方法 GET方法 GET 是最常用…...

代理的基本原理和多线程的基本原理

目录爬虫代理常见代理多线程并发和并行Python中的多进程和多线程爬虫时我们不到一杯茶的功夫就出现了403.打开网页一看会说您的IP访问频率太高&#xff0c;出现这种情况是因为网站采取了一些反爬虫措施&#xff0c;限制某个IP在一定时间内的请求次数&#xff0c;如果超过一定的…...

T38,数的递归

描述 输入一棵节点数为 n 二叉树&#xff0c;判断该二叉树是否是平衡二叉树。 在这里&#xff0c;我们只需要考虑其平衡性&#xff0c;不需要考虑其是不是排序二叉树 平衡二叉树&#xff08;Balanced Binary Tree&#xff09;&#xff0c;具有以下性质&#xff1a;它是一棵空…...

QT+ OpenGL 变换

文章目录QT OpenGL变换向量的运算矩阵矩阵与向量相乘代码实现QT OpenGL 本篇完整工程见gitee:QTOpenGL 对应点的tag&#xff0c;由turbolove提供技术支持&#xff0c;您可以关注博主或者私信博主。 变换 我们需要改变物体的位置 现有解决办法&#xff08;每一帧&#xff0c…...

【算法】前缀和

作者&#xff1a;指针不指南吗 专栏&#xff1a;算法篇 &#x1f43e;要学会在纸上打草稿&#xff0c;这个很重要&#x1f43e; 文章目录1.什么是前缀和&#xff1f;2.怎么求前缀和&#xff1f;3.前缀和有什么用&#xff1f;4.进阶二维:矩阵和前缀和 主打一个记公式 1.什么是前…...

《Redis实战篇》七、Redis消息队列

7.1 Redis消息队列-认识消息队列 什么是消息队列&#xff1a;字面意思就是存放消息的队列。最简单的消息队列模型包括3个角色&#xff1a; 消息队列&#xff1a;存储和管理消息&#xff0c;也被称为消息代理&#xff08;Message Broker&#xff09;生产者&#xff1a;发送消息…...

android组件化

学习流程&#xff1a;1.开源最佳实践&#xff1a;Android平台页面路由框架ARouter-阿里云开发者社区 (aliyun.com)2.中文ARouter使用API&#xff1a;https://github.com/alibaba/ARouter/blob/master/README_CN.md3.看当前文档后面的代码4.这是通俗易懂的文章&#xff1a;https…...

华为OD机试真题Python实现【特异性双端队列】真题+解题思路+代码(20222023)

🔥系列专栏 华为OD机试(Python)真题目录汇总华为OD机试(JAVA)真题目录汇总华为OD机试(C++)真题目录汇总华为OD机试(JavaScript)真题目录汇总文章目录 🔥系列专栏题目输入输出示例一输入输出解题思路核心知识点Python 代码实现代码运行结果版权说明<...

24.架构能力

文章目录24. 架构能力24.1 Competence of Individuals: Duties, Skills, and Knowledge of Architects 个人能力&#xff1a;架构师的职责、技能和知识24.2 Competence of a Software Architecture Organization 软件架构组织的能力24.3 Summary 小结24.4 For Further Reading …...

前端原生 CSS 跑马灯效果,无限轮播(横竖版本,带渐变遮罩,简单实用)

一、横版跑马灯 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthdevice-wid…...

4.8 注解与自定义注解

文章目录1.概述2.注解的分类2.1 JDK注解2.2 元注解2.2.1 Target ElementType…2.2.2 Retention RetentionPolicy…3 自定义注解1.概述 在注解刚出现时&#xff0c;曾受到过好多程序员的鄙夷&#xff0c;觉得这就是多此一举的操作&#xff1b; 但随着时间的推移&#xff0c;越…...

webpack 的热更新是如何做到的?原理是什么?

Hot Module Replacement&#xff0c;简称 HMR&#xff0c;在不需要刷新整个页面的同时更新模块&#xff0c;能够提升开发的效率和体验。热更新时只会局部刷新页面上发生了变化的模块&#xff0c;同时可以保留当前页面的状态&#xff0c;比如复选框的选中状态等。 在 webpack 中…...

嵌入式ARM设计编程(一) 简单数据搬移

文章和代码已归档至【Github仓库&#xff1a;hardware-tutorial】&#xff0c;需要的朋友们自取。或者公众号【AIShareLab】回复 嵌入式 也可获取。 一、实验目的 熟悉实验开发环境&#xff0c;掌握简单ARM汇编指令的使用方法。 二、实验环境 硬件&#xff1a;PC机 软件&am…...

【Selenium】十分钟手把手带你学会WebDriver API

目录 1、定位元素【8种】 2、操作测试对象 3、添加等待 4、弹窗类型 5、浏览器的操作 6、键盘事件 7、选择框 8、上传文件 1、定位元素【8种】 元素定位是自动化测试的核心&#xff0c;想要去操作一个对象&#xff0c;第一步就是需要我们先去识别这个对象。每个对象就会…...

3DMAX高级弯曲插件使用教程

3dMax高级弯曲插件是对3dmax原生“弯曲&#xff08;Bend&#xff09;”修改器的一个增强&#xff0c;给用户更多控制弯曲修改器的参数设置&#xff0c;它让用户输入宽度&#xff0c;插件脚本将移动中心以获得正确的宽度。 主要特性&#xff1a; - 使用智能捕捉捕捉到自定义网格…...

大话软工笔记—需求分析概述

需求分析&#xff0c;就是要对需求调研收集到的资料信息逐个地进行拆分、研究&#xff0c;从大量的不确定“需求”中确定出哪些需求最终要转换为确定的“功能需求”。 需求分析的作用非常重要&#xff0c;后续设计的依据主要来自于需求分析的成果&#xff0c;包括: 项目的目的…...

Python:操作 Excel 折叠

💖亲爱的技术爱好者们,热烈欢迎来到 Kant2048 的博客!我是 Thomas Kant,很开心能在CSDN上与你们相遇~💖 本博客的精华专栏: 【自动化测试】 【测试经验】 【人工智能】 【Python】 Python 操作 Excel 系列 读取单元格数据按行写入设置行高和列宽自动调整行高和列宽水平…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试

作者&#xff1a;Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位&#xff1a;中南大学地球科学与信息物理学院论文标题&#xff1a;BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接&#xff1a;https://arxiv.…...

相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解

【关注我&#xff0c;后续持续新增专题博文&#xff0c;谢谢&#xff01;&#xff01;&#xff01;】 上一篇我们讲了&#xff1a; 这一篇我们开始讲&#xff1a; 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下&#xff1a; 一、场景操作步骤 操作步…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

蓝桥杯3498 01串的熵

问题描述 对于一个长度为 23333333的 01 串, 如果其信息熵为 11625907.5798&#xff0c; 且 0 出现次数比 1 少, 那么这个 01 串中 0 出现了多少次? #include<iostream> #include<cmath> using namespace std;int n 23333333;int main() {//枚举 0 出现的次数//因…...

Java 二维码

Java 二维码 **技术&#xff1a;**谷歌 ZXing 实现 首先添加依赖 <!-- 二维码依赖 --><dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.5.1</version></dependency><de…...

服务器--宝塔命令

一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行&#xff01; sudo su - 1. CentOS 系统&#xff1a; yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...

在Ubuntu24上采用Wine打开SourceInsight

1. 安装wine sudo apt install wine 2. 安装32位库支持,SourceInsight是32位程序 sudo dpkg --add-architecture i386 sudo apt update sudo apt install wine32:i386 3. 验证安装 wine --version 4. 安装必要的字体和库(解决显示问题) sudo apt install fonts-wqy…...

浪潮交换机配置track检测实现高速公路收费网络主备切换NQA

浪潮交换机track配置 项目背景高速网络拓扑网络情况分析通信线路收费网络路由 收费汇聚交换机相应配置收费汇聚track配置 项目背景 在实施省内一条高速公路时遇到的需求&#xff0c;本次涉及的主要是收费汇聚交换机的配置&#xff0c;浪潮网络设备在高速项目很少&#xff0c;通…...