0

可能重复:
在 C++ 中拆分字符串

如何将一堆用空格分隔的单词读入数组?

说我有这句话:

“我喜欢青蛙”

而这个数组:

string mySentenceArray[2]

我想做

mySentenceArray[0] = I
mySentenceArray[1] = like
mySentenceArray[2] = frogs

举个例子。(请不要告诉我对我刚刚写的句子进行硬编码,这是一个例子。)

4

4 回答 4

0

仅使用标准库:

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());
于 2012-10-03T04:05:13.017 回答
0

您可以将字符串转换为一系列标记并将这些标记放入数组中。考虑一下:http ://www.cplusplus.com/reference/clibrary/cstring/strtok/

于 2012-10-03T03:05:40.583 回答
0

有几种方法:

  1. 使用strtok。但它是 C 函数,而不是 C++。混合 C 和 C++ 是不好的风格。此外strtok,函数不是线程安全的。

  2. 使用任何std::string::find方法。情况很复杂。

  3. 使用std::stringstream类。它需要太多的步骤。

  4. 使用boost::algorithm::string::split。我更喜欢这种方式。它简单快捷。

于 2012-10-03T03:18:29.740 回答
0

除非我有其他用途来证明添加额外库的合理性,否则我可能只会使用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"));
于 2012-10-03T03:59:59.657 回答