可能重复:
在 C++ 中拆分字符串
如何将一堆用空格分隔的单词读入数组?
说我有这句话:
“我喜欢青蛙”
而这个数组:
string mySentenceArray[2]
我想做
mySentenceArray[0] = I
mySentenceArray[1] = like
mySentenceArray[2] = frogs
举个例子。(请不要告诉我对我刚刚写的句子进行硬编码,这是一个例子。)
可能重复:
在 C++ 中拆分字符串
如何将一堆用空格分隔的单词读入数组?
说我有这句话:
“我喜欢青蛙”
而这个数组:
string mySentenceArray[2]
我想做
mySentenceArray[0] = I
mySentenceArray[1] = like
mySentenceArray[2] = frogs
举个例子。(请不要告诉我对我刚刚写的句子进行硬编码,这是一个例子。)
仅使用标准库:
istringstream sentence("I like frogs");
vector<string> words(
(istream_iterator<string>(sentence)),
(istream_iterator<string>()));
请注意,在至少一个构造函数参数上实际上需要看似不必要的括号,否则您将被最令人烦恼的 parse 烦恼。
或者,Boost 提供了一些有用的字符串算法,包括split
:
string sentence("I like frogs");
vector<string> words;
boost::algorithm::split(words, sentence, boost::algorithm::is_space());
您可以将字符串转换为一系列标记并将这些标记放入数组中。考虑一下:http ://www.cplusplus.com/reference/clibrary/cstring/strtok/
有几种方法:
使用strtok。但它是 C 函数,而不是 C++。混合 C 和 C++ 是不好的风格。此外strtok
,函数不是线程安全的。
使用任何std::string::find方法。情况很复杂。
使用std::stringstream类。它需要太多的步骤。
使用boost::algorithm::string::split。我更喜欢这种方式。它简单快捷。
除非我有其他用途来证明添加额外库的合理性,否则我可能只会使用stringstream
:
std::istringstream buffer("I like frogs");
std::vector<std::string> words((std::istream_iterator<std::string>(buffer)),
std::istream_iterator<std::string>());
std::copy(words.begin(), words.end(),
std::ostream_iterator<std::string>(std::cout, "\n"));