我如何编写一个字符串标记器,将每个新字符串放入向量中?

问题描述 投票:-2回答:1

如何分割字符串,以便使用strtok_s将每个单词作为元素放入字符串向量中?

c++ tokenize strtok
1个回答
0
投票

使用strtok(或strtok_s)不是一个好主意。不过,使用标准C函数strtok分割字符串的函数可以如下所示

#include <iostream>
#include <string>
#include <vector>
#include <cstring>

std::vector<std::string> split_string( char *s, const char *delim = " \t" )
{
    size_t n = 0;

    for ( size_t i = 0; s[i] != '\0'; )
    {
        i += std::strspn( s + i, delim );

        if ( s[i] != '\0' )
        {
            ++n;
            i += strcspn( s + i, delim );   
        }
    }

    std::vector<std::string> v;
    v.reserve( n );

    char *p = std::strtok( s, delim );

    while ( p != nullptr )
    {
        v.push_back( p );
        p = std::strtok( nullptr, delim );
    }

    return v;   
}

int main() 
{
    char s[] = "Hello John Smith";

    auto v = split_string( s );

    for ( const auto &item : v ) std::cout << item << '\n';

    return 0;
}

程序输出为

Hello
John
Smith
© www.soinside.com 2019 - 2024. All rights reserved.