如何分割字符串,以便使用strtok_s将每个单词作为元素放入字符串向量中?
使用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