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

目录

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.xdnf.cn/news/144100.html

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

相关文章

波士顿机器人滑环的技术特点与应用前景

机器人滑环在现代自动化和机器人技术中扮演着至关重要的角色。作为一种关键的机械组件&#xff0c;滑环允许机器人在旋转和移动的过程中保持稳定的电信号和数据传输。波士顿机器人滑环作为行业中的领先产品&#xff0c;具有多项独特的技术特点和优势&#xff0c;为各种机器人系…

Packet Tracer - 配置编号的标准 IPv4 ACL(两篇)

Packet Tracer - 配置编号的标准 IPv4 ACL(第一篇) 目标 第 1 部分&#xff1a;计划 ACL 实施 第 2 部分&#xff1a;配置、应用和验证标准 ACL 背景/场景 标准访问控制列表 (ACL) 为路由器 配置脚本&#xff0c;基于源地址控制路由器 是允许还是拒绝数据包。本练习的主要内…

如何学习React?一些学习React的网站

React相关网站集锦 React入门 React 官网&#xff1a;https://react.zcopy.site/docs/getting-started.html 深入React原理 1. 图解React&#xff1a;https://7kms.github.io/react-illustration-series/main/bootstrap 帮助我们快速学习React Fiber架构相关知识&#xff0c;主…

STM32—MPU6050

1.MPU6050简介 MPU6050是一个6轴姿态传感器可以测量芯片自身X、Y、Z轴的加速度、角速度参数&#xff0c;通过数据融合&#xff0c;可进一步得到姿态角&#xff0c;常应用于平衡车、飞行器等需要检测自身姿态的场景3轴加速度计(Accelerometer&#xff1a;测量X、Y、Z轴的加速度3…

智源推出下一代检索增强大模型框架MemoRAG

北京智源人工智能研究院与中国人民大学高瓴人工智能学院联合发布了一款创新的人工智能模型框架——MemoRAG。该框架基于长期记忆&#xff0c;旨在推动检索增强生成&#xff08;RAG&#xff09;技术的发展&#xff0c;使其能够处理更复杂的任务&#xff0c;而不仅限于简单的问答…

Vue3 : Pinia的性质与作用

目录 一.性质 二.作用 三.Pinia 的核心概念 四.使用 1.count.ts 2.count.vue Vue 3 中 Pinia 是一个专为 Vue 3 设计的状态管理库&#xff0c;它旨在提供一种简单、直观的方式来管理应用的状态。 一.性质 1.集成性&#xff1a;Pinia 是 Vue 3 官方推荐的状态管理库&…

全志T507-H国产平台Ubuntu系统正式发布,让您的应用开发更便捷!

为了满足广大工业用户的需求&#xff0c;创龙科技针对全志T507-H工业平台进行了Ubuntu系统适配&#xff0c;开发环境如下&#xff1a; Ubuntu&#xff1a;Ubuntu18.04.4 U-Boot&#xff1a;U-Boot-2018.05 Kernel&#xff1a;Linux-4.9.170、Linux-RT-4.9.170 LinuxSDK&…

【AprilTag】视觉定位实战 | 使用 ROS 驱动的 USB 摄像头进行相机标定与 AprilTag 识别

写在前面&#xff1a; &#x1f31f; 欢迎光临 清流君 的博客小天地&#xff0c;这里是我分享技术与心得的温馨角落。&#x1f4dd; 个人主页&#xff1a;清流君_CSDN博客&#xff0c;期待与您一同探索 移动机器人 领域的无限可能。 &#x1f50d; 本文系 清流君 原创之作&…

Mapsui:一个 .NET 开源的地图组件库

前言 今天大姚给大家分享一个.NET开源&#xff08;MIT License&#xff09;、免费、同时支持多平台框架&#xff08;MAUI、WPF、Avalonia、Uno、Blazor、WinUI、Eto、.NET Android 和 .NET iOS&#xff09;地图组件库&#xff1a;Mapsui。 项目源代码 支持的UI框架的NuGet包 创…

文章排名优化@大众点评代发灰色词是什么软件

文章排名优化大众点评代发灰色词是什么软件 如何优化灰色词百度排名推广&#xff08;灰色词推广代发/代做&#xff09;#百度推广#关键词排名#灰色词排名 欢迎来到百收网SEO搜索群&#xff0c;我是狂潮老师&#xff0c;这一节我们来讲一下 on page SEO是什么&#xff1f;大众点…

【JAVA入门】Day46 - Commons-io

【JAVA入门】Day46 - Commons-io 文章目录 【JAVA入门】Day46 - Commons-io一、Commons-io 的常见方法 Commons-io 其实是一个工具包&#xff0c;它里面包含一系列有关IO操作的方法。它的作用就是来提高IO流的开发效率。 Commons 工具包中包含了很多很多有用的工具类&a…

【专题】2024中国生物医药出海现状与趋势蓝皮书报告合集PDF分享(附原数据表)

原文链接&#xff1a;https://tecdat.cn/?p37719 出海已成为中国医药产业实现提速扩容的重要途径。目前&#xff0c;中国医药产业发展态势良好&#xff0c;创新能力不断增强&#xff0c;然而也面临着医保政策改革和带量集采带来的压力。政府积极出台多项政策支持医药企业出海…

【新手上路】衡石分析平台使用手册-租户管理

租户管理​ 衡石系统支持服务一个平台方和多个企业客户的租户模式&#xff0c;平台方管理租户&#xff0c;为租户提供数据&#xff0c;租户在系统内进行数据分析。 衡石系统增加工作空间的设计&#xff0c;在平台方和租户之间提供单向的传递通道&#xff0c;平台厂商可以轻松…

nature communications |多层次蛋白质组分析揭示弥漫型和肠型胃癌之间的分子多样性

文章信息 发表期刊&#xff1a;nature communications 发表日期&#xff1a;2023年2月14日 影响因子&#xff1a;14.7 研究背景 胃癌是世界上主要的癌症类型之一。弥漫型胃癌(DGC)和肠型胃癌(IGC)是胃癌(GC)的主要组织学类型&#xff0c;DGC呈分散的细胞组织&#xff0c;黏…

Vue3使用shapefile读取矢量数据,以数组形式返回坐标点

npm安装: npm install shapefile --save-dev 源码: <script setup> import { ElMessage } from element-plus; import { ref } from vue; // 引入 ref import * as shapefile from "shapefile";// 使用 ref 创建一个引用 const uploadRef ref(null);// 解析…

怎么能让电脑屏幕显示多个监控画面?电脑监控如何多画面显示?

想象一下&#xff0c;你的电脑屏幕变成了一个“指挥中心”&#xff0c;上面同时显示多个监控画面&#xff0c;每个角落都有重要的信息。无论是监控员工的工作情况、实时查看服务器状态&#xff0c;还是观看监控视频&#xff0c;一切尽在掌握中。这不是科幻电影里的场景&#xf…

使用IDA Pro动态调试Android APP

版权归作者所有&#xff0c;如有转发&#xff0c;请注明文章出处&#xff1a;https://cyrus-studio.github.io/blog/ 关于 android_server android_server 是 IDA Pro 在 Android 设备上运行的一个调试服务器。 通过在 Android 设备上运行android_server&#xff0c;IDA Pro …

最新简洁大方的自动发卡网站源码/鲸发卡v11.61系统源码/修复版

源码简介&#xff1a; 最新简洁大方的自动发卡网站源码&#xff0c;它就是鲸发卡v11.61系统源码&#xff0c;它是修复版。 说到鲸发卡系统&#xff0c;鲸发卡系统在发卡圈很多人都知道的&#xff0c;它是市面最好发卡系统之一&#xff0c;操作起来简单得很&#xff0c;界面也…

Django 5 学习笔记 2024版

1. 官方中文文档 Django 文档 | Django 文档 | Django (djangoproject.com) 2. 第一个应用 博客 总目录 <1>依赖安装: pip install django <2> 创建 工程 myapp django-admin startproject myapp cd myapp <3>创建 应用 app > python manage.py s…

【protobuf】ProtoBuf的学习与使用⸺C++

W...Y的主页 &#x1f60a; 代码仓库分享&#x1f495; 前言&#xff1a;之前我们学习了Linux与windows的protobuf安装&#xff0c;知道protobuf是做序列化操作的应用&#xff0c;今天我们来学习一下protobuf。 目录 ⼀、初识ProtoBuf 步骤1&#xff1a;创建.proto文件 步…