【C++基础】strtok()函数的用法(能去除冗余空格!!有关于被分割字符串的分析!!)

文章目录

    • 1.函数原型
    • 2.函数功能
    • 3.举例演示
    • 4.注意点


1.函数原型

char *strtok(char *s,const char *delim)



2.函数功能

1.分解字符串为一组字符串,s为要分解的字符串,delim为分隔字符串
2.strtok()用来将字符串分割成一个个片段,参数s指向将要被分隔的字符串,参数delim则为分隔字符串,当strtok()在参数s的字符串中发现到参数delim的分隔字符时,则会将该字符改为’\0’字符,在第一次调用时,strtok()必需给予参数s字符串,往后的调用则将参数s设置成NULL.每次调用成功则返回被分隔片段的指针。
2.很重要的点!!!函数分割可以去除冗余空格!

原字符串(有很多冗余空格)"      This    is  a sentence with  7 tokens      " 
能分割为: "This"  "is"  "a"  "sentence"  "with"  "7"  "tokens"



3.举例演示

1.分割的操作我们以及很清楚了,但是分割后原字符串是什么情况你分析清楚了嘛
2.下面三张图片分别展示,分割前字符串的状态,分割后字符串的状态,和最终输出的状态!
3.分割前就正常,分割后会去除前后以及中间所有的冗余空格,把单词分割出来,并且仔细观察图片,原字符串在每一个单词结束的位置加入了字符串结束符’\000’,这个也是分割时的原理!很重要!!!

#include 
#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;

/* 函数第一次调用需设置两个参数。第一次分割的结果,返回串中第一个 ',' 之前的字符串,也就是上面的程序第一次输出abc。   
 * 第二次调用该函数strtok(NULL,","),第一个参数设置为NULL。结果返回分割依据后面的字串,即第二次输出d。   
 * strtok是一个线程不安全的函数,因为它使用了静态分配的空间来存储被分割的字符串位置   
 * 线程安全的函数叫strtok_r,ca   
 * 运用strtok来判断ip或者mac的时候务必要先用其他的方法判断'.'或':'的个数,
 * 因为用strtok截断的话,比如:"192..168.0...8..."这个字符串,strtok只会截取四次,中间的...无论多少都会被当作一个key
 */

int main() {
    //正确的
    char sentence[]="      This    is  a sentence with  7 tokens      ";
    //char sentence1[]="This is a sentence with 7 tokens";
    cout<<sentence<<endl;
    char *tokenPtr=strtok(sentence," ");

    while(tokenPtr!=NULL) {
        cout<<tokenPtr<<'\n';
        tokenPtr=strtok(NULL," ");
    }
    cout<<sentence<<endl;
    return 0;
}

【C++基础】strtok()函数的用法(能去除冗余空格!!有关于被分割字符串的分析!!)_第1张图片
【C++基础】strtok()函数的用法(能去除冗余空格!!有关于被分割字符串的分析!!)_第2张图片

【C++基础】strtok()函数的用法(能去除冗余空格!!有关于被分割字符串的分析!!)_第3张图片



4.注意点

strtok()第一个参数必须是char* ,不可以是string,如果想用需要转化,可以去我的另一篇博客查看C++中char*和string的相互转化!

//正确的
char sentence[]="This is a sentence with 7 tokens";
char *tokenPtr=strtok(sentence," ");
//错误的
string str="This is a sentence with 7 tokens";
char *tokenPtr1=strtok(str," ");

你可能感兴趣的:(#,C++特殊函数,c++,c语言)