数组基于 C++ 中的句子

array based on a sentence in C++

本文关键字:句子 C++ 数组      更新时间:2023-10-16

可能的重复项:
拆分C++字符串

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

假设我有这句话:

"我喜欢青蛙"

而这个数组:

string mySentenceArray[2]

我想做

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

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

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

有几种方法:

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

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

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

  4. 使用 boost::algorithm::
  5. 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"));

仅使用标准库:

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

请注意,在至少一个构造函数参数上,看似不必要的括号实际上是必需的,否则您将被最烦人的解析所困扰。

或者,Boost 提供了一些有用的字符串算法,包括split

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