56.【C语言】字符函数和字符串函数(strtok函数)(未完)

news2024/9/20 12:40:33

目录

12.strtok函数(较复杂)

*简单使用

总结:

*优化


12.strtok函数(较复杂)

*简单使用

strtok:string into tokens

cplusplus的介绍 点我跳转

翻译:

函数

strtok


char * strtok ( char * str, const char * delimiters );

总结:

delimiters参数指向一个字符串,定义了用作分隔符的字符集合
• 第一个参数指定一个字符串,它包含了0个或者多个由delimiters字符串中一个或者多个分隔符分割的标记
• strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。(注:
strtok函数会改变被操作的字符串,所以被strtok函数切分的字符串一般都是临时拷贝(如:一份原字符串arr,一份拷贝字符串copy)的内容并且可修改(不能用const修饰))

• strtok函数的第一个参数不为NULL ,函数将找到str中第一个标记,strtok函数将保存它在字符串
中的位置
• strtok函数的第一个参数为NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标

• 如果字符串中不存在更多的标记,则返回NULL 指针

例如1:定义{.}为分隔符集合

www.csdn.net可以按分隔符拆分为www和csdn和net

例如2:定义{@ .}为分隔符集合

user@csdn.net可以按分隔符拆分为user和csdn和net

#define   _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
	char arr[20] = { "user@csdn.net" };
	char delimiters[20] = { "@." };
	char copy[20] = { 0 };
	strcpy(copy, arr);
    char* p = strtok(copy, delimiters);
	printf("%s", p);
	return 0;
}

如果执行多次

    char* p = strtok(copy, delimiters);
	printf("%s\n", p);
	p = strtok(NULL, delimiters);
	printf("%s\n", p);
	p = strtok(NULL, delimiters);
	printf("%s\n", p);

再执行一次则打印(null)

copy数组中user@csdn.net ,其中@和.为分隔符

strtok(copy,delimiters)数组名是数组首元素的地址

strtok(copy,delimiters)执行后,copy数组变为user\0csdn.net ,返回的指针p指向这个\0

strtok(NULL,delimiters)含NULL(这里不是空指针的含义)时,在上述字符串中被保存的位置(即\0)开始,查找下一个标记,执行后,copy数组变为user\0csdn\0net ,返回的指针p指向第二个\0

strtok(NULL,delimiters)执行后,不存在更多的标记,则返回NULL 指针,因此打印(null)

*优化

上方的代码执行效率不高,要打印多次,因此改用循环

#define   _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
	char arr[20] = { "user@csdn.net" };
	char delimiters[20] = { "@." };
	char copy[20] = { 0 };
	char* p = NULL;
	strcpy(copy, arr);
	for (p = strtok(copy, delimiters); p != NULL; p = strtok(NULL, delimiters))
	{
		printf("%s\n",p);
	}
	return 0;
}

for循环分析,不同于以往的(int i=?;i<?;i++或i--)

p = strtok(copy, delimiters);为初始化,仅执行一次

p!=NULL;为循环条件

p = strtok(NULL, delimiters);为循环变量的调整

即:若有分隔符.执行完p = strtok(copy, delimiters);后执行p = strtok(NULL, delimiters);

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

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

相关文章

RK3568平台(基础篇)示波器的使用

一.示波器面板介绍 示波器的横轴表示的是时间,在横轴上有10个小格,每个小格的时间是200us。 示波器的纵轴表示的是电压,在纵轴上有8个小格,每个小格的电压表示1V。 以上是个方波,方波在纵轴上占5个小格,每个小格的电压是500mv,所以这个方波的电压为2500mv。 方波在横…

每日OJ题_牛客_dd爱框框(滑动窗口)

目录 dd爱框框&#xff08;滑动窗口&#xff09; 解析代码 dd爱框框&#xff08;滑动窗口&#xff09; dd爱框框_牛客题霸_牛客网 解析代码 基础同向双指针算法。关于滑动窗口的介绍可看这篇&#xff1a;Offer必备算法02_滑动窗口_八道力扣OJ题详解&#xff08;由易到难&am…

【我的 PWN 学习手札】Largebin Attack(<= glibc-2.38可利用)

目录 前言 一、Largebin Attack的通用利用方法 二、再次 Largebin Attack 三、测试与模板 前言 早期的 Largebin Attack&#xff0c;通过修改 largebin 中 free chunk 的 bk 和 bk_nextsize 指针域&#xff0c;能够实现任意地址写堆地址。然而在 glibc > version2.30 后…

Mycat搭建读写分离

启动Mycat 进入 /mycat/conf/datasources目录下&#xff0c;修改prototypeDs.datasource.json文件 去mycat/bin目录用启动mycat ./mycat start (关闭mycat ./mycat stop)连接mycat 默认端口8066 用户名root 密码123456 注意&#xff1a;这里ip设为null表示任何ip都可以访问…

【学习笔记】SSL/TLS安全机制之CAA

1、概念界定 CAA全称Certificate Authority Authorization&#xff0c;即证书颁发机构授权&#xff0c;每个CA都能给任何网站签发证书。 2、CAA要解决的问题 例如&#xff0c;蓝色网站有一张橙色CA颁发的证书&#xff0c;我们也知道还有许多其他的CA&#xff1b;中间人可以说服…

JACM23 - A New Algorithm for Euclidean Shortest Paths in the Plane

前言 如果你对这篇文章感兴趣&#xff0c;可以点击「【访客必读 - 指引页】一文囊括主页内所有高质量博客」&#xff0c;查看完整博客分类与对应链接。 本文关注的问题为计算几何学中的经典问题&#xff0c;即「在平面上给定一组两两不相交的多边形障碍物&#xff0c;寻找两点…

Redis(redis基础,SpringCache,SpringDataRedis)

文章目录 前言一、Redis基础1. Redis简介2. Redis下载与安装3. Redis服务启动与停止3 Redis数据类型4. Redis常用命令5. 扩展数据类型 二、在Java中操作Redis1. Spring Data Redis的使用1.1. 介绍1.2. 环境搭建1.3. 编写配置类&#xff0c;创建RedisTemplate对象1.4. 通过Redis…

助力数字农林业发展服务香榧智慧种植,基于嵌入式端超轻量级模型LeYOLO全系列【n/s/m/l】参数模型开发构建香榧种植场景下香榧果实检测识别系统

作为一个生在北方但在南方居住多年的人&#xff0c;居然头一次听过香榧&#xff08;fei&#xff09;这种作物&#xff0c;而且这个字还不会念&#xff0c;查了以后才知道读音&#xff08;fei&#xff09;&#xff0c;三声&#xff0c;这着实引起了我的好奇心&#xff0c;我相信…

C++入门基础知识75(高级)——【关于C++ Web 编程】

成长路上不孤单&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a;&#x1f60a; 【14后&#x1f60a;///C爱好者&#x1f60a;///持续分享所学&#x1f60a;///如有需要欢迎收藏转发///&#x1f60a;】 今日分享关于C Web 编程的相关内容&#xff01; 关于…

HomeAssistant显示节假日

先看效果 步骤&#xff1a; 新建卡片时选择“Markdown 卡片”代码在文章最下方&#xff0c;当然你也可以自己修改 点击保存/完成 ### {% if now().hour > 6 and now().hour < 9 -%} 早上好&#xff0c; {%- elif now().hour > 9 and now().hour < 12 -%} 上午好…

【SSM-Day2】第一个SpringBoot项目

运行本篇中的代码&#xff1a;idea专业版或者idea社区版本&#xff08;2021.1~2022.1.4&#xff09;->这个版本主要是匹配插件spring boot Helper的免费版(衰) 【SSM-Day2】第一个SpringBoot项目 框架->Spring家族框架快速上手Spring BootSpring Boot的作用通过idea创建S…

【iOS】引用计数

引用计数 自动引用计数引用计数内存管理的思考方式自己生成的对象&#xff0c;自己所持有非自己生成的对象&#xff0c;自己也能持有不再需要自己持有的对象时释放无法释放非自己持有的对象 自动引用计数 自动引用计数(ARC,Automatic Reference Counting)是指内存管理中对引用…

最新多模板测算系统源码 测算系统海外多语言版

最新多模板测算系统源码 测算系统海外多语言版 源码下载&#xff1a;https://download.csdn.net/download/m0_66047725/89763600 更多资源下载&#xff1a;关注我。

10年408考研真题-数据结构

23.[2010统考真题]若元素 a,b,c,d,e,f 依次进栈&#xff0c;允许进栈、退栈操作交替进行&#xff0c;但不允许连续3次进行退栈操作&#xff0c;不可能得到的出栈序列是(D)。 A.dcebfa B.cbdaef C.bcaefd D.afedcb 解析&#xff1a;直接看D选项&#xff0c…

基于WOA-SVM的乳腺癌数据分类识别算法matlab仿真,对比BP神经网络和SVM

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1 支持向量机&#xff08;SVM&#xff09; 4.2 WOA 4.3 WOA优化SVM参数 5.算法完整程序工程 1.算法运行效果图预览 (完整程序运行后无水印) 2.算法运行软件版本 matlab2022a 3.部分核…

探索开放资源上指令微调语言模型的现状

人工智能咨询培训老师叶梓 转载标明出处 开放模型在经过适当的指令调整后&#xff0c;性能可以与最先进的专有模型相媲美。但目前缺乏全面的评估&#xff0c;使得跨模型比较变得困难。来自Allen Institute for AI和华盛顿大学的研究人员们进行了一项全面的研究&#xff0c;探索…

eNSP简单用法

建立一个简单的拓扑图 点击绿色三角开启设备 双击设备可以进行命令编辑 视图 分为三个视图&#xff1a;用户视图、系统视图、接口视图 用户视图 在默认模式下就是&#xff0c;为<huawei> 按ctrlz返回用户视图 系统视图&#xff1a; 在用户视图下输入sys切换&#…

【数据可视化】Arcgis api4.x 热力图、时间动态热力图、timeSlider时间滑块控件应用 (超详细、附免费教学数据、收藏!)

1.效果 目录 1.效果 2.安装配置 3.热力图 4.TimeSlider滑块应用 4.1 时间滑块控件 4.2 添加控件 5.时间动态热力图 2.安装配置 这里不教大家如何在前端框架使用arcgis api。不过npm安装、css如何引入、教学数据存放与图层加载的教程&#xff0c;可以浏览我之前发的一篇文…

基于DeepCFD模型和CNN/U-Net模型的流场预测

1.遇到问题 计算流体力学&#xff08;Computational fluid dynamics, CFD&#xff09;通过对Navier-Stokes方程&#xff08;简称N-S方程&#xff09;的精确求解&#xff0c;能够精准获取流体在不同状态下的物理量分布详情&#xff0c;这些物理量包括但不限于密度、压力及速度等…

Nginx从入门到入土(二): 学习内容与安装

Nginx学习内容 1.理解Nginx在实际项目中的应用场景 2.理解正向代理和反向代理 3.Nginx在Linux和Windows上的安装 4.Nginx的运行模型概念与日志管理 5.Nginx.config核心配置文件与配置HTTPS证书 6.基于Nginx解决跨域&#xff0c;实现防盗链&#xff0c;缓存&#xff0c;压…