首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

C++实现字符串分割函数split()「建议收藏」

目录 使用strtok()完成分割 使用strsep()完成分割 使用strtok_r()完成分割 实现字符串分割 ---- 前言 最近遇到了一个字符串分割的问题,在C++的标准库里面没有字符分割函数split...在 中定义 该函数被设计为多次调用,以从同一字符串中获取连续的token。 如果 str !...如果未找到这样的字符,str则只有一个标记,以后调用strtok将返回一个空指针 如果找到了这样的字符,则将其替换为空字符’\0’,并将指向下一个字符的指针存储在静态位置中...使用strtok_r()完成分割 strtok是一个线程不安全的函数,因为它使用了静态分配的空间来存储被分割的字符串位置,线程安全的函数是strtok_r()。...str为要分解的字符串,delim为分隔符字符串。char **saveptr参数是一个指向char *的指针变量,用来在strtok_r内部保存切分时的上下文,以应对连续调用分解相同源字符串。

1.9K10

strtok独到深刻的讲解「建议收藏」

使用strtok需要注意的有以下几点: 1.函数的作用是分解字符串,所谓分解,即没有生成新串,只是在s所指向的内容上做了些手脚而已。因此,源字符串s发生了变化!...实际上,strtok函数根据delim中的分界符,找到其首次出现的位置,即Fred后面那个空格(buffer[5]),将其修改成了’/0’。其余位置不变。...4.参数 分隔符delim的探讨(delim是分隔符的集合) 很多人在使用strtok的时候,都想当然的以为函数在分割字符串时完整匹配分隔符delim,比如delim=”ab”,则对于”acdab”这个字符串...也就是说包含在delim中的字符均可以作为分隔符,而非严格匹配。可以把delim理解为分隔符的集合。这一点是非常重要的~ 当然,我们在分解字符串的时候,很少使用多个分隔符。...好了,本文详细介绍了使用strtok的注意事项,(二)中我将详细介绍strtok不能实现的一些功能并引出strtok_r函数,最后介绍一下两个函数的实现。

68910
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    在 C++ 中标记字符串与getline() 函数和字符数组

    对字符串进行标记表示根据某些分隔符拆分字符串。...有很多方法可以对字符串进行标记。在这篇文章中解释了其中的四个: 使用字符串流 一个字符串流与允许你从字符串,就好像它是一个流中读取流的字符串对象关联。...juejin Contribute 使用strtok_r() 就像 C 中的 strtok() 函数一样,strtok_r() 执行相同的任务,将字符串解析为标记序列。...分隔 为 空格 和逗号 getline() 函数和字符数组 在C++中,流类支持面​​向行的函数,getline()和write()分别执行输入和输出功能。...将字符存储在缓冲区中。 提取的最大字符数为 size – 1。 注意终止符(或分隔符)可以是任何字符(如' '、'、' 或任何特殊字符等)。终止符被读取但不保存到缓冲区中,而是由空字符替换。

    1.4K20

    C:字符串函数(完)-学习笔记

    前言: 这篇文章将介绍strstr函数,strtok函数,strerror函数 1、strstr 1.1 strstr的使用 strstr --- string string 在一个字符串中,找一个字字符串...第一个参数指定一个字符串,它包含了0个或者多个有sep字符串中一个或者多个分隔符分隔的标记 strtok函数找到str中的下一个标记,并将其用\0结尾,返回一个指向这个标记的指针。...strtok函数找到str中的下一个标记,并将其用\0结尾,返回一个指向这个标记的指针。...函数会根据指定的分隔符(通常在后续调用中指定)在str中查找第一个分隔符。...是0,表示没有错误,当我们在使用标准库中的函数的时候发生了某种错误,就会将对应的错误码,存放在errno中,而一个错误码的数字是整数很难理解是什么意思,所以每一个错误码都是 有对应的错误信息的。

    7710

    C语言重点突破(3)字符串函数与内存函数的介绍

    本章重点 重点介绍处理字符和字符串的库函数的使用和注意事项 前言 C语言里对字符串函数使用的特别频繁,但却没有规定字符串类型,那它在字符串里是如何存储的呢?...9 strtok  这个函数用来分割字符串,关于参数 sep参数是个字符串,定义了用作分隔符的字符集合 第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标...strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。...(注: strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容 并且可修改。)...NULL,它只会返回字符串中第一个标记前的字符串(标记集合不按顺序,以在字符串中的顺序为主),当你置为NULL后,才会在字符串中继续寻找下一个标记,并返回标记前的字符串。

    11810

    strtok 函数

    5、strtok在调用的时候,如果起始位置即为分隔符,则忽略了起始位置开始的分隔符 三、使用strtok需要注意的有以下几点: 1.函数的作用是分解字符串,所谓分解,即没有生成新串,只是在s所指向的内容上做了些手脚而已...实际上,strtok函数根据delim中的分界符,找到其首次出现的位置,即Fred后面那个空格(buffer[5]),将其修改成了’/0’。其余位置不变。...这就很好解释为什么打印buffer的值只能出现“,Fred”,而非buffer中的全部内容了。因此,使用strtok时一定要慎重,以防止源字符串被修改。...4.参数 分隔符delim的探讨(delim是分隔符的集合) 很多人在使用strtok的时候,都想当然的以为函数在分割字符串时完整匹配分隔符delim,比如delim=”ab”,则对于”acdab”这个字符串...也就是说包含在delim中的字符均可以作为分隔符,而非严格匹配。可以把delim理解为分隔符的集合。这一点是非常重要的~ 当然,我们在分解字符串的时候,很少使用多个分隔符。

    58320

    c语言进阶部分详解(详细解析字符串常用函数,并进行模拟实现(下))

    一.字符串查找 1.strstr() strstr是一个C标准库函数,用于在一个字符串中查找另一个字符串的第一次出现的位置。...它的原型如下: char * strtok (char *str , const char *delim); 其中,str是要分割的字符串,delim是用作分隔符的字符串。...strtok函数使用一个静态变量来保存当前的分割位置,因此在多次调用strtok时,需要将原始字符串传递给第一次调用,而后续的调用只需要传递NULL作为第一个参数 strtok函数的第一个参数不为 NULL...,函数将找到str中第一个标记,strtok函数将保存它在字符串中的位置 strtok函数的第一个参数为 NULL ,函数将在同一个字符串中被保存的位置开始,查找下一个标记 2.1示例 int main...在上面的示例中,strlen(src) + 1计算了源字符串的长度,并将其加1,以便复制\0 2.memmove() memmove是一个标准C库函数,用于将一段内存区域的数据复制到另一段内存区域

    16510

    深入理解字符串函数(strstr、strtok、strerror)(二)

    strstr 的使用和模拟实现​ 作用:返回字符串在另外一个字符串中第一次出现的位置,即查找子串 在字符串str1中查找是否存在与str2相等的子串 如果存在,则返回一个地址(返回字符串str2...• strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。...(注:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。...是一个分隔符,它告诉 strtok 函数在哪里分割字符串。 char* s = NULL;定义了一个字符指针 s,并初始化为 NULL。...首次调用时,strtok 会使用 p 中指定的分隔符来分割 arr2。之后每次调用,strtok 会继续在上一次分割的位置之后寻找下一个分隔符。

    22510

    strtok()函数的使用以及注意事项

    5、strtok在调用的时候,如果起始位置即为分隔符,则忽略了起始位置开始的分隔符 三、使用strtok需要注意的有以下几点: 1.函数的作用是分解字符串,所谓分解,即没有生成新串,只是在s所指向的内容上做了些手脚而已...实际上,strtok函数根据delim中的分界符,找到其首次出现的位置,即Fred后面那个空格(buffer[5]),将其修改成了’/0’。其余位置不变。...这就很好解释为什么打印buffer的值只能出现“,Fred”,而非buffer中的全部内容了。因此,使用strtok时一定要慎重,以防止源字符串被修改。...4.参数 分隔符delim的探讨(delim是分隔符的集合) 很多人在使用strtok的时候,都想当然的以为函数在分割字符串时完整匹配分隔符delim,比如delim=”ab”,则对于”acdab”这个字符串...也就是说包含在delim中的字符均可以作为分隔符,而非严格匹配。可以把delim理解为分隔符的集合。这一点是非常重要的~ 当然,我们在分解字符串的时候,很少使用多个分隔符。

    1.7K20

    【C进阶】——详解10个C语言中常见的字符串操作函数及其模拟实现

    ,但这里还是带大家一起来复习一下,并强调一些注意事项: 字符串以 ‘\0’ 作为结束标志,strlen函数返回的是在字符串中 ‘\0’ 前面出现的字符个数(不包含 ‘\0’ )。...当我们把arr和p传给strtok: strtok函数的第一个参数不为 NULL ,strtok函数找到str中的第一个标记(分隔符)时停止,保存它在字符串 中的位置,并将其用 \0 结尾,返回一个指向这个标记的指针...注:strtok函数会改变被操作的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。..."; char* ret = strtok(arr, p); printf("%s", ret); return 0; } 那按照上面的规则,strtok会找到第一个分隔符’@‘,将其置为’\0...也就是说,再次调用该函数时,只要我们第一个参数给它传空指针NULL,strtok就会从上次保存的位置(即上次查到的分隔符的位置),继续向后寻找下一个分隔符,将其置为’\0’,然后返回起始地址。

    88210

    strtok()函数详解!

    strtok()函数详解! 1.定义 分解字符串为一组字符串。s为要分解的字符,delim为分隔符字符(如果传入字符串,则传入的字符串中每个字符均为分割符)。...第一次分割之后,原字符串str是分割完成之后的第一个字符串,剩余的字符串存储在一个静态变量中,因此多线程同时访问该静态变量时,则会出现错误。...*strToken, const char *strDelimit, char **buf); 这个函数将剩余的字符串存储在buf变量中,而不是静态变量中,从而保证了安全性。...,buf也是指针,这句代码的意思就是把buf中的字符串以”$”为分隔符分割开来,分割出来的字符串保存到指针p中。...strtok函数的分隔字符还可以是多个,不一定只为一个 p = strtok(buf, “$,”); 这句代码的意思是以””和”,”为分隔符分割buf中的字符串。

    1.4K20

    因为一个函数strtok踩坑,我被老工程师无情嘲笑了(一)

    ID:技术让梦想更伟大 作者:李肖遥 在用C/C++实现字符串切割中,strtok函数经常用到,其主要作用是按照给定的字符集分隔字符串,并返回各子字符串。...strtok()函数详解 描述 该函数用来将字符串分割成一个个片段,并返回各子字符串。...注意事项 使用该函数进行字符串分割时,会破坏被分解字符串的完整,调用前和调用后的s已经不一样了。第一次分割之后,原字符串str是分割完成之后的第一个字符串,剩余的字符串存储在一个静态变量中。...strtok函数在提取字符串时使用了静态缓冲区,因此,它是线程不安全的,多线程同时访问该静态变量时,则会出现错误。...要想使用这个函数,找到linux下的实现源码,复制到你的程序中即,或者使用GNU C Library。 strtok_r函数是strtok函数的可重入版本。

    9.6K31

    【C语言】【字符串函数】【超详解】【下】!!!

    前言: 在上一篇中,我们已经详细讲解了C语言字符串函数中用到最多的几种函数的使用及其模拟实现,本篇我们就将学习C语言字符串函数中,一些非常实用但稍有难度的几个字符串函数。...str2在字符串str1中第⼀次出现的位置 2、字符串的⽐较匹配不包含 \0 字符,以 \0 作为结束标志 strstr函数的使用 /* strstr example */ #include <stdio.h...); sep参数指向⼀个字符串,定义了⽤作分隔符的字符集合 • 第⼀个参数指定⼀个字符串,它包含了0个或者多个由sep字符串中⼀个或者多个分隔符分割的标 记。...• strtok函数找到str中的下⼀个标记,并将其⽤ \0 结尾,返回⼀个指向这个标记的指针。...(注: strtok函数会改变被操作的字符串,所以在使⽤strtok函数切分的字符串⼀般都是临时拷⻉的内容并且可修改。)

    8110

    strtok函数与函数用法实例

    一:函数简介: 使用strtok函数需要索引头文件#include,strtok函数通常用于分割以及重组。被特殊字符间隔的字符串。...strtok的函数原型为char *strtok(char *str, char *sep)strtok()在参数str的字符串中发现参数sep中包含的分割字符时,则会将该字符改为\0 字符。...在第一次调用时,strtok()必需给予参数str一个需要进行分割的字符串,往后的调用则应将参数s设置成NULL。每当strtok函数被成功调用,该函数都会返回一个指向已经成功分割的子字符串的指针。...之后的调用:str=strtok(NULL,str),之后的调用该函数第一个参数需要传递一个空指针,函数会从上一次调用被更改为’\0’的分隔符之后的地址向后继续查找字符串中的分割字符。...” “;//分隔符字符串,可自行设置多个或其他的分割字符 char* str=NULL;//初始化 int i=0; for(str=strtok(arr3,sep);str

    72330

    C语言进阶(九) - 字符与字符串函数 - 4 - strstr()函数、strtok()函数、strerror()函数

    ,在字符相同的情况下,依次比较下一对字符直到遇到str2中的'\0'就说明找到了。...()函数 2.2 strtok()函数介绍 char * strtok ( char * str, const char * delimiters ); 所需头文件为 这个函数可以把一个含有分隔符的字符串通过分隔符的集合分成多个子字符串...strtok函数找到str中的下一个标记(子字符串),并将其用'\0'结尾,返回一个指向这个标记的指针。...strtok函数会改变(破坏)被操作的字符串,所以使用strtok函数切割的字符串一般是副本并且可以被修改。...strtok函数的第一个参数不是NULL时,函数将找到传入字符串str中的第一个标记(子字符串),strtok函数将保存它在字符串中的位置。

    47710

    第二节— —字符函数和字符串函数(没有废话,全是干货)

    1.strstr的使用和模拟实现 1.1strstr的使用 各种函数使用介绍 - ->C语言库函数 1. 函数返回字符串str2在字符串str1中第⼀次出现的位置 2....字符串的比较匹配不包含 \0 字符,以 \0 作为结束标志 简而言之,即是在字符串str1中寻找是否有与字符串str2相同的字符串,如果有:则返回从字符串str1中首次出现相同字符串的位置,没有:则返回...的使用 1. sep参数指向一个字符串,定义了用作分隔符的字符集合。...第一个参数指定一个字符串,它包含了0个或者多个由sep字符串中一个或者多个分隔符分割的标记。 3. strtok函数找到str中的下⼀个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。...的时候errno是0,表示没有错误,当我们在使用标准库中的函数的时候发生了某种错误,就会将对应 的错误码,存放在errno中,而一个错误码的数字是整数很难理解是什么意思,所以每⼀个错误码都是 有对应的错误信息的

    9410

    <string.h>字符串函数常用函数使用与注意事项(内附英文官方详解)

    :字符串字节数类型为 注意: 字符串已经 '\0' 作为结束标志,strlen函数返回的是在字符串中 '\0' 前面出现的字符个数(不包含 '\0' )。...注意:暂无 ⑨、char *strtok( char * str, const char * sep ); 作用:sep参数是个字符串,定义了用作分隔符的字符集合 第一个参数指定一个字符串,它包含了0...strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向这个标记的指针。)...返回值:strtok函数找到str中的下一个标记,并将其用 \0 结尾,返回一个指向段字符串的首地址(开始位置)指针,且strtok函数将保存它在字符串中的位置(再次调用时且为同一个函数,则会将上一次的结束位置开始...,向后寻找分隔符) 注意: strtok函数会改变被操作(将分隔符修改为"\0")的字符串,所以在使用strtok函数切分的字符串一般都是临时拷贝的内容并且可修改。

    40910

    C语言(10)----字符函数和字符串函数

    头文件:string.h 要求: • sep参数指向一个字符串,定义了用作分隔符的字符集合。 • 第⼀个参数指定整个字符串,它包含了0个或者多个由sep字符串中⼀个或者多个分隔符分割的标 记。...• strtok函数找到str中的下⼀个标记,并将其用 \0 结尾,返回⼀个指向这个标记的指针。...(注: strtok函数会改变被操作的字符串, 所以一般会使用strcpy先拷贝一份字符串再对其进行操作) • strtok函数的第⼀个参数不为 NULL ,函数将找到str中第⼀个标记,strtok函数将保存它在字符串...(根据此特性,通常使用循环来使得将由分隔符分割的所有字符串的部分全部依次打印出来) • 如果字符串中不存在更多的标记,则返回 NULL 指针。...printf将其打印出来;所以我们也可以使用perror函数,它的作用是在得到错误信息的同时还会将错误信息直接打印。

    15010
    领券