子串替换矢量

时间:2015-07-14 15:14:38

标签: c++ vector replace substring

这是一个最小代码示例

我试图创建一个子串数组来查找,所以我可以用一个单词替换它们。在这种情况下,我将常见的问候变成了简单的“嗨”。

问题在于,当我运行代码时,我收到了错误。

错误:没有匹配函数来调用' std :: vector> :: push_back(const char [4],const char [4],const char [3])'

如果有人可以帮助我理解为什么会出现这种错误,并建议一个完美的解决方案。

#include <iostream>
#include <string>
#include <algorithm>
#include <cctype>
#include <ctime>
#include <vector>

    vector<string> hiWord;
    hiWord.push_back("hey", "sup", "yo");
    for (const auto& word : hiWord){
    while (true) {
     index = r.find(word);
     if (index == string::npos)
        break;
     r.replace(index, word.size(), "hi");
  }
}

2 个答案:

答案 0 :(得分:1)

您可能希望首先创建要搜索和替换的字符串向量:

vector<string> searchWords = {"hey", "hello", "sup"};

然后使用循环来运行您已编写的代码,例如

for (const auto& word : searchWords) {
  while (true) {
     index = r.find(word);
     if (index == string::npos)
        break;
     r.replace(index, word.size(), "hi");
  }
}

答案 1 :(得分:0)

您可以通过创建自己的替换功能来实现此目的

void replace(std::string &str, const std::string &token, const std::string &newToken)
{
    size_t index = 0;
    while((index = r.find(token, index)) != std::string::npos)
    {
        r.replace(index, token.length(), newToken);
    }
}

//You can overload this function to take a vector, Array or whathever you like
void replace(std::string &str, const std::vector<std::string> &tokens, const std::string &newToken)
{
    for(size_t i = 0; i < tokens.size(); ++i)
    {
        replace(str, tokens[i], newToken);
    }
}

//And you can call it like this
string r("hey hello sup");

replace(r, "hey", "hi");
replace(r, {"hello", "sup"}, "hi");