一个字句切割(strtok_s)

本文介绍了一种使用strtok_s函数进行字符串分割的方法,该函数允许自定义分割符,能够有效处理包含特定符号的字符串。通过示例代码展示了如何将原始字符串按指定分隔符切分为多个子串,并存储在数组中。

突然想到的一件事这是,之前是用stringstream来对那些东西切割的,只是空格分隔的,之后发现不能切割其他符号的字句(也可能是我水平有限),然后我发现strtok_s可以自定义分割符,于是我记录一下这个操作。

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
const int maxn = 1 << 10;
int main(void) {
    string s;
    getline(cin, s);
    const char*c = " ,*";
    char *p;
    char *next = NULL;
    string str[maxn];//用来存储分割后的单词
    int i = 0;
    p = strtok_s(const_cast<char*>(s.c_str()), c, &next);
    while (p) {
        str[i++].append(p);//存储用
        p = strtok_s(NULL, c, &next);
    }
    for (auto iter : str)
        cout << iter;
    system("pause");
    return 0;
}

ps:我用的时string数组的存储方式,当然还有好多更好用的存储方式,只是点到即可。每次调用strtok_s都是以一次分隔符结束,至于第一参数在第二次调用开始都用了NULL的解释我也不是很清楚,我的理解是里面有个静态变量,null相当于告诉函数这不是第一次调用,没有新传入值,只是继续进行下一个next 就好,在此再说一下形参:

strToken
这个参数用来存放需要分割的字符或者字符串整体

strDelimit
这个参数用来存放分隔符(例如:,.!@#$%%^&*() \t \n之类可以区别单词的符号)

context
这个参数用来存放被分割过的字符串

locale
这个参数用来储存使用的地址
虽说有4个参数,但是我们可控参数只有3个locale是不可控的

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值