C语言从头学68——学习头文件string.h

       在《C语言从头学31》中,我们学习过“与字符串变量相关的几个函数”,已经知道诸如strcpy、strcat、strcmp()、strlen()等函数定义在string.h中。现在,接着学习string.h中的其它一些函数。
一、函数strchr(),strrchr()
       功能:在字符串中查找指定字符。
       使用格式:strchr(参1,参2); //从头向尾查找(正向)
                         strrchr(参1,参2);//从尾向头查找(逆向)
                           参1:字符串指针变量
                           参2:int型字符
       返回值:找到该字符会停止查找并返回指向该字符的指针(char*类型);如果没有找到则返回NULL。
       说明:这两个函数的使用方法相同,只是查找的方向不同。
二、函数strspn(),strcspn()
       功能:用来查找属于(或者不属于)指定字符集合的字符串长度。
       使用格式:strspn(参1,参2) //查找属于指定字符集合的字符
                         strcspn(参1,参2) //查找不属于指定字符集合的字符
                           参1:源字符串
                           参2:指定字符集合
        返回值:a. strspn()从源字符串第一个字符开始查找,当找到不属于指定字符集合的字符时停止并返回此时的字符串长度(不含不属于的那一个);b.  strcspn()也是从参1的第一个字符开始查找,当找到属于指定字符集合的字符时停止查找,并返回此时的字符串长度(不含属于的那一个字符)。以上两个函数条件相反,如始终没有符合条件的,则返回整个字符串长度。
三、函数strpbrk()
       功能:在字符串中搜索指定字符集合的任意一个字符。
       使用格式:strpbrk(参1,参2);
           参1:源字符串
           参2:指定字符集合
       返回值:返回找到的第一个符合条件字符的指针,找不到返回NULL。
四、函数strstr()
       功能:在一个字符串里面查找另一个字符串。
       使用格式:(参1,参2);
           参1:源字符串
           参2:待查子字符串。
       返回值:查找到指向源字符串里面子字符串的指针;找不到返回NULL。
五、函数strtok()
       功能:将字符串按照指定的分隔符分解成系列单元。
       使用格式:strtok(参1,参2);
          参1:待拆分的字符串指针;(参1为NULL时的意义见说明)
          参2:指定的分隔符
      返回值:指向分解出来的第一个单元,没有分解出来的单元时返回NULL。
      说明:
       a. 参1应使用数组形式;使用char*形式可能报错;strtok() 会修改原始字符串,将所有分隔符
      都替换成字符串结尾符号\0,这也是参1要使用数组形式的原因。
       b. strtok函数不是一次性一个句子分解完毕,一次只分解一个单元出来;
       b. 如想继续分解,参1改成NULL后,每调用一次,可分解出下一个单元。
六、函数memchr()
      功能:在内存区域中查找指定字符
      使用格式:memchr(参1,参2,参3);
          参1:指向内存区域的指针(void*)
          参2:要查找的字符(int)
          参3:内存区域的字节长度(size_t)
      返回值:找到后将停止查找,并返回指向该位置的指针。查完指定的字节数仍找不到则返回NULL。
 七、举例程序

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
#include<stddef.h>
#include<string.h> //头文件问题有时编译时发现不了,运行时才能发现
int main(void)
{
//实验函数strchr()、strrchr()char* s = "Hello World!";int c = 'o';char* p1 = strchr(s,c); //正向查找ptrdiff_t pd1 = p1 - s;char* p2 = strrchr(s, c);//反向查找ptrdiff_t pd2 = p2 - s;if (p1 != NULL)printf("o在正数第%d位\n", (int)pd1);//运行结果:o在正数第4位if (p2 != NULL)printf("倒数第%d位也是o\n", (int)strlen(s) - (int)pd2);//运行结果:倒数第5位也是o
//实验函数strspn(),strcspn() <下面使用的s还是"Hello World!">char* stdStr = "aeiou"; //元音字母int len = strspn(s,stdStr);//查找属于的函数,遇到不属于的停printf("strspn返回长度:%d\n", len);//运行结果:strspn返回长度:0//分析:第一个字符H即不在“aeiou”中,立即停止查找,故返回0len = strcspn(s, stdStr);//查找不属于的函数,遇到属于的停printf("strcspn返回长度:%d\n", len);//运行结果:strspn返回长度:1//分析:第1个字H不属于,第2个e属于了,故结束查找,返回1
//实验函数strpbrk()(还是使用s="Hello World!",stdStr = "aeiou")char* ptr = strpbrk(s,stdStr);ptrdiff_t pd = ptr - s;printf("找到的字符位置:%d\n",(int)pd);//运行结果:找到的字符位置:1printf("解析指针ptr:%s\n", ptr);//运行结果:解析指针ptr:ello World!
//实验函数strstr()s = "000123456789";stdStr = "345";ptr = strstr(s,stdStr);pd = ptr - s;printf("找到的子字符串位于:%d\n", (int)pd);//运行结果:找到的子字符串位于:5
//实验函数strtok()char ss[] = "Hello World is first computer program.";char* ret[8];ret[0] = strtok(ss," ");//提取第1个词Helloprintf("s分解出的第1个词:%s\n",ret[0]);for (int i = 1; i < 6; i++){ret[i] = strtok(NULL, " ");//依次提取2、3、4、5、6等printf("s分解出的第%d个词:%s\n",i+1,ret[i]);//s分解出的第1个词:Hello//s分解出的第2个词:World//s分解出的第3个词:is//s分解出的第4个词:first//s分解出的第5个词:computer//s分解出的第6个词:program.}
//实验函数memchr()char* s = "abcdefghijklmn";char* p;int c = 'k';p = (char*)memchr(s, c, 15);ptrdiff_t pd = p - s;printf("查找的字符在第%d位\n", (int)pd);//运行结果:查找的字符在第10位printf("找到的字符:%c\n", *p);//运行结果:找到的字符:kgetchar();return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

xss-labs靶场第一关测试报告

目录 一、测试环境 1、系统环境 2、使用工具/软件 二、测试目的 三、操作过程 1、注入点寻找 2、使用hackbar进行payload测试 3、绕过结果 四、源代码分析 五、结论 一、测试环境 1、系统环境 渗透机&#xff1a;本机(127.0.0.1) 靶 机&#xff1a;本机(127.0.0.…

AI时代大厂AI项目管理学习路线

AI时代避免被裁员&#xff0c;大厂AI项目管理学习路线主要包括&#xff1a; 1、AI项目管理基础技能。 2、项目管理AI技术知识。 3、数据分析与决策。 4、AI项目管理工具。 5、AI项目管理知识扩展。 01 AI项目管理基础技能。 AI项目管理基础技能构成了项目管理的骨架&…

# linux从入门到精通-从基础学起,逐步提升,探索linux奥秘(九)--网络设置与文件上传下载

linux从入门到精通-从基础学起&#xff0c;逐步提升&#xff0c;探索linux奥秘&#xff08;九&#xff09;–网络设置与文件上传下载 一、网络设置 1、首先知道网卡配置文件位置&#xff1a;/etc/sysconfig/network-scripts [rootlocalhost test1]# ls /etc/sysconfig/netwo…

【Java SE 题库】递归的魅力之--> 汉诺塔问题

&#x1f525;博客主页&#x1f525;&#xff1a;【 坊钰_CSDN博客 】 欢迎各位点赞&#x1f44d;评论✍收藏⭐ 目录 1. 题目 2. 分析 2.1 图解 2.2 代码解析 3. 完整代码 3.1 运行截图 4. 小结 1. 题目 汉诺塔问题是一个经典的递归问题&#xff0c;源自一个古老的印度传…

剪辑视频怎么学?四大工具助你轻松入门!

无论是制作短视频、记录生活点滴&#xff0c;还是从事专业影视制作&#xff0c;掌握视频剪辑技巧都至关重要。那么&#xff0c;剪辑视频怎么学呢&#xff1f;本文将为大家推荐四款实用的视频剪辑工具&#xff0c;助你轻松入门&#xff01; 福昕视频剪辑&#xff1a;简单易用&a…

双十一买些提高幸福感的生活单品!五款精选好物推荐~

双十一购物狂欢即将来临&#xff0c;这是一年一度的购物盛宴&#xff0c;家电和数码产品通常会在这个时期提供诱人的折扣。但品牌众多&#xff0c;每款产品又各有千秋&#xff0c;让人难以抉择。今天&#xff0c;我将分享一些在双十一期间值得考虑的高品质好物&#xff0c;让我…

AI与物理学的交汇:Hinton与Hopfield获诺贝尔物理学奖

诺贝尔物理学奖颁给了AI&#xff01;机器学习先驱Hinton与Hopfield联手获奖&#xff0c;出乎所有人的意料。 今年的诺贝尔物理学奖颁给了机器学习领域的两位先驱&#xff0c;杰弗里辛顿&#xff08;Geoffrey Hinton&#xff09;和约翰霍普菲尔德&#xff08;John Hopfield&…

外包干了6天,技术明显退步。。。

我是一名大专生&#xff0c;自20年通过校招进入湖南某软件公司以来&#xff0c;便扎根于功能测试岗位&#xff0c;一晃便是近四年的光阴。今年9月&#xff0c;我如梦初醒&#xff0c;意识到长时间待在舒适的环境中&#xff0c;已让我变得不思进取&#xff0c;技术停滞不前。更令…

Netty学习笔记

0.NIO三大组件&#xff08;channel、selector、buffer&#xff09; 1.channel&#xff1a; 相当于socket&#xff0c;和socket相比是非阻塞式的 2.selector&#xff1a; 和一个线程组成一个整体&#xff0c;对channel进行轮询&#xff0c;对事件进行监听和派发 3.buffer&#x…

利用FnOS搭建虚拟云桌面,并搭建前端开发环境(一)

利用FnOS搭建虚拟云桌面&#xff0c;并搭建前端开发环境 一 飞牛FnOS官方文档一、安装FnOS【Win11系统】1.下载VirtualBox2.下载FnOS镜像3.创建虚拟机4.启动完成后&#xff0c;会进入这样一个界面&#xff0c;这个基本上后续就后台了 本人在网上冲浪了很久&#xff0c;一直也没…

MySQL之复合查询与内外连接

目录 一、多表查询 二、自连接 三、子查询 四、合并查询 五、表的内连接和外连接 1、内连接 2、外连接 前面我们讲解的mysql表的查询都是对一张表进行查询&#xff0c;即数据的查询都是在某一时刻对一个表进行操作的。而在实际开发中&#xff0c;我们往往还需要对多个表…

json格式的post请求目前不行, 要换成form表单形式的post请求怎么改

问: 下面是我的代码 export function fetchDeleteList<T>(agentSessionId: string) {return post<T>({url: http://192.168.0.116:8089/pipe-ics/agent/delete,method: post,data: { agentSessionId },}) } 目前是json格式的post请求, 目前不行, 要换成form表单…

Pandas处理时间序列之光谱分析与聚类

import matplotlib.pylab as plt %matplotlib inline import numpy as np from numpy import fft import pandas as pd 一、光谱分析 • 将时间序列分解为许多正弦或余弦函数的总和 • 这些函数的系数应该具有不相关的值 • 对正弦函数进行回归 光谱分析应用场景 基于光谱的…

Android OpenGLES2.0开发(四):矩阵变换和相机投影

事物的本质是事物本身所固有的、深藏于‌现象背后并决定或支配现象的方面‌。 还记得我们上一篇绘制的三角形吗&#xff0c;我们确实能够顺利用OpenGL ES绘制出图形了&#xff0c;这是一个好的开始&#xff0c;但这还远远不够。我们定义的坐标是正三角形&#xff0c;但是绘制出…

YoloV10改进策略:BackBone改进|CAFormer在YoloV10中的创新应用,显著提升目标检测性能

摘要 在目标检测领域,模型性能的提升一直是研究者和开发者们关注的重点。近期,我们尝试将CAFormer模块引入YoloV10模型中,以替换其原有的主干网络,这一创新性的改进带来了显著的性能提升。 CAFormer,作为MetaFormer框架下的一个变体,结合了深度可分离卷积和普通自注意力…

学习博客写作

欢迎使用Markdown编辑器 你好&#xff01; 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章&#xff0c;了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些功能拓展与语法支持&#x…

Vue】Vue扫盲(四)组件化思想与简单应用

【Vue】Vue扫盲&#xff08;一&#xff09;事件标签、事件修饰符&#xff1a;click.prevent click.stop click.stop.prevent、按键修饰符、及常用指令 【Vue】Vue扫盲&#xff08;二&#xff09;指令&#xff1a;v-for 、v-if、v-else-if、v-else、v-show 【Vue】Vue扫盲&…

解决银河麒麟桌面操作系统V10(ARM)中`apt-get update`“正在等待报头”问题

解决银河麒麟桌面操作系统V10&#xff08;ARM&#xff09;中apt-get update“正在等待报头”问题 1、问题描述2、 解决方法步骤一&#xff1a;打开终端步骤二&#xff1a;清理APT缓存步骤三&#xff1a;再次尝试更新软件源 &#x1f496;The Begin&#x1f496;点点关注&#x…

spring面试之2024

1、什么是spring? Spring是一个Java开发框架&#xff0c;它提供了一种可扩展的模型来开发Java应用程序。Spring框架的目标是提供一个全面的解决方案&#xff0c;用于构建企业级应用程序。Spring框架的核心特点包括依赖注入&#xff08;DI&#xff09;、面向切面编程&#xff…

django的路由分发

前言&#xff1a; 在前面我们已经学习了基础的Django了&#xff0c;今天我们将继续学习&#xff0c;我们今天学习的是路由分发&#xff1a; 路由分发是Web框架中的一个核心概念&#xff0c;它指的是将不同的URL请求映射到对应的处理函数&#xff08;视图&#xff09;的过程。…