c++ - 使用迭代器获取字符串中的短语。

标签 c++ vector iterator

我有包含许多句子的 vector ,例如“你好,你好吗”。我希望能够从句子中提取大小为 2 和 5 的短语,然后将其存储在另一个 vector 中。比如从上面的字符串中,希望得到“hello there”“hello there how” “你好,你好吗”和“你好,你好吗”。

我尝试将句子拆分成单独的单词并使用以下方法将它们存储在一个 vector 中:

while( getline(stream, word, ' ') )
{

    vecWord.push_back(word);
}

这删除了所有的空格并存储了每个单词。我知道迭代器指向 vector 中的每个元素。我如何使用迭代器指向每个元素(又名每个单词)并将它们组合成 2 - 5 大小

任何帮助将不胜感激

最佳答案

试试这个。给定 all(所有单词的列表)和 target(所需子字符串中的单词列表)。这可以分解为过于独立的问题。首先,找到子字符串,然后找到包含它的所有后续子字符串。第一部分与如何在字符串中查找子字符串的一般问题非常相似。即如何在“abc7845xyz”中找到“45x”。如果掌握如何使用迭代器是您正在做的事情的想法,我建议查找使用普通 C 数组索引样式迭代编写的字符串搜索算法,并尝试将它们转换为迭代器。

for(auto i = all.begin();i < all.end() - target.size();i++){
    auto temp_i = i;
    bool found = found = true;
    for(auto j = target.begin();found && j < target.end();j++, temp_i++)
        found = *temp_i == *j;

    // Substring found, so print all subsequent substrings containing it.
    if(found){
        auto start = i;
        for(auto end = i + target.size();end < all.end();end++){
           for(auto j = start;j <= end;j++)
               cout << j << " ";
           cout << endl;
        }
    }
}

关于c++ - 使用迭代器获取字符串中的短语。,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22124422/

相关文章:

c++ - 在 C++ 中迭代类的 vector

c++ - boost::range::join 一个自定义调用中的多个范围

c# - 将包含两个 foreach 循环的迭代器拆分为两个不同的函数

c++ - 两个不同的插槽调用相同的方法 - 线程安全

c++ - 如果返回类型为 static const 时返回非静态本地会发生什么

c++ - 颜色的浮点 RGB 值与 ubyte RGB 值

c++ - 是否可以使用 `std::set_intersection` 来检查两个集合是否有任何共同元素?

c++ - 与位置无关的代码和 vtable

string - 如何将 Vec<String> 转换为 Vec<&str>?

c++ - 如何使用 C++ STL 算法重写嵌套循环?