基于C ++中的句子的数组

时间:2012-10-03 02:55:41

标签: c++ arrays sentence

  

可能重复:
  Splitting a string in C++

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

说我有这句话:

“我喜欢青蛙”

这个数组:

string mySentenceArray[2]

我想制作

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

仅作为一个例子。 (请没有人告诉我硬编码我刚写的句子,这是一个例子。)

4 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

有几种方法:

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

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

  3. 使用std::stringstream课程。它需要太多步骤。

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

答案 2 :(得分: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"));

答案 3 :(得分:0)

仅使用标准库:

istringstream sentence("I like frogs");
vector<string> words(
    (istream_iterator<string>(sentence)), 
    (istream_iterator<string>()));

请注意,至少有一个构造函数参数实际上需要看似不必要的括号,否则您将被most vexing parse烦恼。

或者,Boost提供了一些useful string algorithms,包括split

string sentence("I like frogs");
vector<string> words;
boost::algorithm::split(words, sentence, boost::algorithm::is_space());