首页 > 其他分享 >C语言中的strtok()函数

C语言中的strtok()函数

时间:2024-06-21 11:57:38浏览次数:19  
标签:函数 strtok list C语言 char token 字符串 NULL

strtok() 函数是 C 标准库 <string.h> 头文件的一部分,用于将字符串分割成一个个标记(token)。

语法
#include <string.h>
char* strtok(char* string, const char* delimiter);
  • string:要分割的输入字符串。
  • delimiter:分隔符字符串。

strtok() 函数将根据分隔符字符将输入字符串分割成标记。每次调用 strtok(input, delimiter) 函数时,它将返回第一个标记。要获取后续的标记,需要在随后的调用中将输入字符串设置为 NULL,直到函数返回 NULL

使用方法

我们通常会不断调用 strtok(NULL, delimiter) 直到它返回 NULL

示例

以下是一个使用 strtok() 函数的 C 程序示例:

#include <stdio.h>
#include <string.h>

int main() {
   char input_string[] = "Hello Tutorials Point!";
   char token_list[20][20]; // 用于存储分割出的子字符串
   char* token = strtok(input_string, " ");
   int num_tokens = 0; // 用于记录分割出的子字符串数量

   while (token != NULL) {
      strcpy(token_list[num_tokens], token); // 将子字符串复制到列表中
      num_tokens++;
      token = strtok(NULL, " "); // 获取下一个标记
   }

   // 打印子字符串列表
   printf("Token List:\n");
   for (int i = 0; i < num_tokens; i++) {
      printf("%s\n", token_list[i]);
   }
   return 0;
}
输出

当执行上述程序时,会产生如下结果:

Token List:
Hello
Tutorials
Point!

详细解释

  1. 包含头文件

    #include <stdio.h>
    #include <string.h>
    

    包含标准输入输出和字符串操作的头文件。

  2. 定义输入字符串和存储子字符串的数组

    char input_string[] = "Hello Tutorials Point!";
    char token_list[20][20]; // 用于存储分割出的子字符串
    

    input_string 是要分割的字符串,token_list 用于存储分割出的子字符串。

  3. 调用 strtok() 并初始化第一个标记

    char* token = strtok(input_string, " ");
    

    使用空格作为分隔符,将 input_string 分割成第一个标记。

  4. 循环分割字符串并存储子字符串

    int num_tokens = 0; // 用于记录分割出的子字符串数量
    
    while (token != NULL) {
       strcpy(token_list[num_tokens], token); // 将子字符串复制到列表中
       num_tokens++;
       token = strtok(NULL, " "); // 获取下一个标记
    }
    

    使用 strtok() 分割字符串,并将每个子字符串复制到 token_list 数组中。每次调用 strtok(NULL, " ") 获取下一个标记,直到返回 NULL

  5. 打印子字符串列表

    printf("Token List:\n");
    for (int i = 0; i < num_tokens; i++) {
       printf("%s\n", token_list[i]);
    }
    

    遍历 token_list 数组并打印所有子字符串。

通过这个示例,可以看到 strtok() 函数如何将字符串分割成多个标记。每次调用 strtok() 时,它都会返回下一个标记,直到没有更多标记为止。这使得 strtok() 函数非常适合用于解析和处理字符串。

标签:函数,strtok,list,C语言,char,token,字符串,NULL
From: https://blog.csdn.net/mzgxinhua/article/details/139688938

相关文章

  • 今天才知道原来C#操作符重载函数中可以访问私有成员
    起因为了方便比较版本号,所以想到用struct封装一个结构体并重载它的操作符.因为不常使用操作符重载,以为它的成员访问级别应该和普通的静态函数没有区别直到使用时无意间发现它竟然能访问到对应成员的私有成员!!!从而可以做到在重载类型操作时不必要公开一些成员访问,达......
  • C++ 面向对象高级开发 3、构造函数
    1、内联函数inline 内联函数速度比较快 最终是不是inline实际上是由编译器决定的。 一般比较简单,编译器就能确定inline函数 2、AccessLevel访问级别  3、构造函数Construct默认实参。Defaultargument.充分利用构造函数的特殊语法,对数据进行初始化,这是一种比......
  • 使用Microsoft.SemanticKernel基于本地运行的Ollama大语言模型实现Agent调用函数
    大语言模型的发展日新月异,记得在去年这个时候,函数调用还是gpt-4的专属。到今年本地运行的大模型无论是推理能力还是文本的输出质量都已经非常接近gpt-4了。而在去年gpt-4尚未发布函数调用时,智能体框架的开发者们依赖构建精巧的提示词实现了gpt-3.5的函数调用。目前在本机运行的大......
  • C语言-静态通讯录(全功能)(详略版)
    目录前言:     基本功能:游戏主体: 定义结构体:初始化结构体:添加联系人: 显示通讯录:修改联系人信息:查找联系人:删除联系人:排序通讯录:清空联系人:前言:             大家好,今天写了一个通讯录系统,本程序也是对结构体的考察,我会尽......
  • 请编写一个函数fun,它的功能是:根据以下公式求X的值(要求满足精度0.0005,即某项小于0.000
    /*请编写一个函数fun,它的功能是:根据以下公式求X的值(要求满足精度0.0005,即某项小于0.0005时停止迭代):X/2=1+1/3+1×2/3×5+1×2×3/3×5×7+1×2×3×4/3×5×7×9+...+1×2×3×...×n/3×5×7×(2n+1)程序运行后,如果输入精度0.0005,则程序输出为3.14...。*/#include<stdi......
  • [C]可变参量,debugprint函数
    造冰箱的大熊猫@cnblogs2024/6/201、可变参量#include<stdio.h>#include<stdarg.h>voiddebugprint(constchar*format,...){va_listargs;va_start(args,format);printf(format,args);va_end(args);}intmain(){debugprint("Hell......
  • 请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度
    /*请编写一个函数fun,它的功能是:比较两个字符串的长度,(不得调用C语言提供的求字符串长度的函数)函数返回较长的字符串。若两个字符串长度相同,则返回第一个字符串。*/#include<stdio.h>char*fun(char*buff,char*str){intbuff_len=0,str_len=0;while(bu......
  • 在SQL中使用explode函数展开数组的详细指南
    目录简介示例1:简单数组展开示例2:展开嵌套数组示例3:与其他函数结合使用处理结构体数组示例:展开包含结构体的数组示例2:展开嵌套结构体数组总结简介在处理SQL中的数组数据时,explode函数非常有用。它可以将数组中的每个元素单独提取出来,便于进一步处理。本文将通过几......
  • HMAC与Hash算法——C语言实现
    hash算法是HMac的Mac hmacsha256.h1/**2*@filehmacsha256.h3*@authoryourname([email protected])4*@brief5*@version0.16*@date2024-06-207*8*@copyrightCopyright(c)20249*10*/1112#ifndef_HMAC_SHA_256_H_13#......
  • MySQL进阶知识之存储过程、函数、流程控制、索引
    【一】MySQL进阶知识之存储过程【1】什么是存储过程存储过程就类似于Python中的自定义函数内部包含了一系列可以执行的SQL语句,存储过程存储在MySQL服务端中,可以通过调用存储过程触发内部的SQL语句存储过程是在关系型数据库中存储的一组预定义的SQL语句集合,可以接收参数并返回......