首页 > 其他分享 >C语言 ——— 学习并使用 strtok 函数

C语言 ——— 学习并使用 strtok 函数

时间:2024-08-06 08:55:48浏览次数:11  
标签:函数 strtok ret C语言 char str 字符串 分段

目录

strtok函数的功能

strtok函数的参数以及返回值​编辑

使用strtok函数

使用方法一:根据需要分段的字符串写代码

使用方法二:配合for循环巧妙使用


strtok函数的功能

将字符串拆分为各个段,举例说明:

输入:

第一个参数:"[email protected]" ;第二个参数:"@."

输出(分段输出):

"rjiaju" ,"yeah" ,"net"


strtok函数的参数以及返回值

strtok函数的参数: 

char* str:str指针是需要被分段的字符串的首地址,所以在形参部分传递的是需要被分段的字符串的首地址,且每次分段后,会在分段位置赋值为 '\0' ,所以最好不要将原字符串传递,可以先将原字符串拷贝到另一个字符串中,让strtok函数操作另一个字符串

const char* delimiters:delimiters指针是分段符的字符串,所以参数部分要传递分段符字符串的起始位置,且次字符串只是用来分段,并不会改变原字符串,所以加上 const 修饰

strtok函数的返回值:

当传递的 str 为空指针时,直接返回null ,否则最开始返回第一个分段的起始位置,后续依次放回后面分段的起始位置,知道遇到字符串结束标志 '\0' 时,才返回null

注意:

strtok函数并不是一次性把所有分段返回来,而是第一次调用函数时,返回第一个段的起始位置,再多次调用函数时,返回的才是依次往后的分段,且第一次调用时,传递的形参是字符串和字符分段串,而后续调用函数时,需要传递的是NULL和字符分段串 


使用strtok函数

使用方法一:根据需要分段的字符串写代码

#include<stdio.h>
#include<string.h>
int main()
{
	char str[] = "[email protected]";
	char delimiters[] = "@.";

	// 拷贝str字符串
	char tmp[20] = { 0 };
	strcpy(tmp, str);

	char* ret = strtok(tmp, delimiters);
	printf("%s\n", ret);

	ret = strtok(NULL, delimiters);
	printf("%s\n", ret);

	ret = strtok(NULL, delimiters);
	printf("%s\n", ret);

	return 0;
}

代码验证:


使用方法二:配合for循环巧妙使用

#include<stdio.h>
#include<string.h>
int main()
{
	char str[] = "[email protected]";
	char delimiters[] = "@.";

	// 拷贝str字符串
	char tmp[20] = { 0 };
	strcpy(tmp, str);

	// 打印str字符串的各个分段
   for (char* ret = strtok(tmp, delimiters); ret != NULL; ret = strtok(NULL, delimiters))
   {  
	   printf("%s\n", ret);
   }

   return 0;
}

代码验证:

标签:函数,strtok,ret,C语言,char,str,字符串,分段
From: https://blog.csdn.net/weixin_55341642/article/details/140935870

相关文章

  • 状态方程到传递函数
    现代控制理论中描述物体的运动用状态方程,在自动控制原理中则使用的是传递函数,他们之间通过什么方式转换呢?通过一个例子说明转换过程,假设一个系统如下:其中u表示输入,y表示输出,x表示中间的状态。求系统的传递函数需要用到拉普拉斯变换,将第一个等式和第二个等式进行拉普拉斯变换,则:......
  • C语言day11(string函数族、递归函数、结构体、共用体、枚举)
    【1】string函数族1.strlen头文件:#include<string.h>格式:size_tstrlen(constchar*s);功能:计算字符串实际长度,不包括\0参数:s:目标字符串首地址返回值:字符串实际长度2.strcpy    头文件:#include<string.h>    格式:char*strcpy(char*dest,......
  • C++ 拷贝构造函数语义与移动构造函数语义
    拷贝构造函数语义与移动构造函数语义一、拷贝构造函数语义1.编译器生成拷贝构造函数的条件2.自定义拷贝构造函数3.深拷贝与浅拷贝4.拷贝构造函数的使用场景5.拷贝赋值运算符6.规则五(RuleofFive)二、移动构造函数语义1.禁止生成移动构造函数2.生成移动构造函数......
  • C语言编译和链接
    前言我们已经写了这么多的代码,那我们是不是应该了解一下代码是运行的呢?1.翻译环境和运行环境翻译环境将源代码转换为二进制指令。运行环境用于执行实际代码2.翻译环境翻译环境主要由编译和链接两个大过程组成,而编译又可以分解成:预处理/预编译,编译,汇编三个过程。2.1......
  • Vs code写C语言代码配置(超级详细基础,小白也能看得懂)
    前言本文旨在为那些希望在VSCode中配置C语言开发环境的开发者提供一份详尽的指南。无论你是C语言的新手,还是希望提升开发效率的老手,本文都将引导你通过一系列简单的步骤,完成VSCode的C语言开发配置。我们将涵盖从安装VSCode开始,到配置编译器、调试器,以及安装必要的扩展,确保......
  • 模拟实现 memcpy --浅谈C语言
    内存拷贝-memcpy描述C库函数void*memcpy(void*str1,constvoid*str2,size_tn)从存储区str2复制n个字节到存储区str1。memcpy是最快的内存到内存复制子程序。它通常比必须扫描其所复制数据的strcpy,或必须预防以处理重叠输入的memmove更高效。memcpy,memcpy......
  • 深圳大学-电信院-C程序设计实验-数组、函数、结构体的综合使用
    实验目的(1)进一步掌握数组的定义与使用;进一步掌握函数的定义和函数调用方法;(2)学习和掌握结构体的定义和使用方法;(3)进一步掌握C语言的编程方法;学习动画程序的基本设计思想和方法。实验内容本实验编写一个在控制台窗口中,在不考虑重力的条件下,模拟一组弹球在一个二......
  • 嵌入式开发C语言学习day28-华清作业8.5
    思维导图作业1:pipe.c//使用有名管道实现一个进程用于给另一个进程发消息//另一个进程收到消息后展示到终端上并且将消息保存到文件上一份#include<myhead.h>intmain(intargc,charconst*argv[]){//创建一个有名管道if(mkfifo("./linux",0664)......
  • 实验6-8 使用函数输出指定范围内的完数
    本题要求实现一个计算整数因子和的简单函数,并利用其实现另一个函数,输出两正整数m和n(0<m≤n≤10000)之间的所有完数。所谓完数就是该数恰好等于除自身外的因子之和。例如:6=1+2+3,其中1、2、3为6的因子。函数接口定义:intfactorsum(intnumber);voidPrintPN(intm,intn......
  • 实验6-9 使用函数输出指定范围内的Fibonacci数
    本题要求实现一个计算Fibonacci数的简单函数,并利用其实现另一个函数,输出两正整数m和n(0<m≤n≤10000)之间的所有Fibonacci数。所谓Fibonacci数列就是满足任一项数字是前两项的和(最开始两项均定义为1)的数列。函数接口定义:intfib(intn);voidPrintFN(intm,intn);......