首页 > 其他分享 >56.【C语言】字符函数和字符串函数(strtok函数)(未完)

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

时间:2024-09-18 13:51:31浏览次数:3  
标签:NULL 函数 strtok delimiters 56 char 字符串 copy

目录

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:定义{@ .}为分隔符集合

[email protected]可以按分隔符拆分为user和csdn和net

#define   _CRT_SECURE_NO_WARNINGS
#include <stdio.h>
#include <string.h>
int main()
{
	char arr[20] = { "[email protected]" };
	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数组中[email protected] ,其中@和.为分隔符

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] = { "[email protected]" };
	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);

标签:NULL,函数,strtok,delimiters,56,char,字符串,copy
From: https://blog.csdn.net/2401_85828611/article/details/142313699

相关文章

  • C++信奥老师解一本通题 1164:digit函数
    ​【题目描述】在程序中定义一函数digit(n,k),它能分离出整数n从右边数第k个数字。【输入】正整数n和k。【输出】一个数字。【输入样例】318593【输出样例】8#include<iostream>usingnamespacestd;intdigit(longlongn,intk){ if(k==1) returnn%10......
  • Java 8 新特性:Lambda 表达式与函数式接口全面解析(OOF(面向函数编程))
    在Java8中,引入了一系列重要的新特性,极大地提升了开发者的编程体验和代码简洁性。其中,Lambda表达式和函数式接口是最具影响力的特性,尤其在推动Java进入函数式编程领域方面具有里程碑意义。本文将全面深入地讨论Lambda表达式、函数式接口(包括Java内置函数式接口与自......
  • scapy函数 TCP() 使用说明
    前言全局说明scapy函数TCP()使用说明一、说明环境:Ubuntu18.04.6LTS(Linuxqt-vm5.4.0-150-generic#167~18.04.1-UbuntuSMPWedMay2400:51:42UTC2023x86_64x86_64x86_64GNU/Linux)pythonPython2.7.17(default,Mar82023,18:40:28)[GCC7.5.0]onli......
  • scapy函数 IP() 使用说明
    前言全局说明scapy函数IP()使用说明一、说明环境:Ubuntu18.04.6LTS(Linuxqt-vm5.4.0-150-generic#167~18.04.1-UbuntuSMPWedMay2400:51:42UTC2023x86_64x86_64x86_64GNU/Linux)python3Python3.6.9(default,Mar102023,16:46:00)[GCC8.4.0]onl......
  • VUE框架CLI组件化组件绑定自定义事件时回调函数的this对象------VUE框架
    <template> <div> <!--内置函数的实现步骤--> <!--提供事件源,给事件源绑定事件,编写回调函数,将回调函数和事件进行绑定--> <!--等待事件的触发,事件触发执行回调函数--> <!--组件的自定义事件实现步骤--> <button@click="Hello()">你好</button> <!--给Us......
  • Gbase 8a支持DATE_TO_CHAR 函数
    DATE_TO_CHAR函数,功能是把日期格式化为YYYY-MIM-DD格式(format格式)的字符串;使用格式为:DATETO_CHAR(date,format)说明:date,日期类型;format,格式字符串;在开启控制参数时,format为可选参数,不输入format,默认为YYYY-MM-DD。DATE_TO_CHAR函数的使用优点众多,具体如下:1、提高......
  • YOLOv9改进策略【损失函数篇】| Shape-IoU:考虑边界框形状和尺度的更精确度量
    一、本文介绍本文记录的是改进YOLOv9的损失函数,将其替换成Shape-IoU。现有边界框回归方法通常考虑GT(GroundTruth)框与预测框之间的几何关系,通过边界框的相对位置和形状计算损失,但忽略了边界框本身的形状和尺度等固有属性对边界框回归的影响。为了弥补现有研究的不足,Shape-I......
  • 第七章习题14-输入10个学生5门课的成绩,分别用函数实现下列功能:①计算每个学生的平均分
     ......
  • 函数新特性、内联函数、const详解
    函数新特性、内联函数、const详解函数新特性函数回顾与后置返回类型//1.前面放auto,标识函数返回类型放到参数列表之后//2.而放在参数列表之后的返回类型是通过->开始的autofunc(inta,intb)->void内联函数函数定义前加incline,这个普通函数就变成了内联函数......
  • 信号的机制——信号处理函数的注册
    在Linux操作系统中,为了响应各种各样的事件,也是定义了非常多的信号。我们可以通过kill-l命令,查看所有的信号。#kill-l1)SIGHUP2)SIGINT3)SIGQUIT4)SIGILL5)SIGTRAP6)SIGABRT7)SIGBUS8)SIGFPE9)SIGKILL10)......