C ++ While循环和搜索算法,重复

时间:2018-04-07 23:10:58

标签: c++ vector containers

for (int j = 0; j < messageVector.size(); j++)
{
    for (int i = 0; i < bookVector.size(); i++)
    {
        size_t offset = 0;
        while ((offset = bookVector[i].find(messageVector[j], offset)) != string::npos)
        {
                cout << "Found " << messageVector[j] << " at " << i << "," << offset << std::endl;
                ++offset;
        }
    }
}

我对此代码的问题是,如果bookvector包含重复的字母,则该字母将同时打印两个位置。所以如果messageVector包含消息&#34; test&#34;但是bookvector包含带有额外t的字母,输出将是:在i处找到,偏移两次,然后是消息的其余部分。这不一定是一个问题,但我希望重复的字母只用一组随机的坐标打印一次,其中找到了一个t。

我正在考虑解决问题的方法,我基本上是用伪代码完成的,我将获得具有相同字符的所有行和偏移量,将它们放入容器中,随机挑选一个。使用角色将找到的位置打印到控制台,清除容器并移动到下一个字母并重新执行。但是我不知道在while循环中该做什么。如果有人可以帮助我完成它,那就太好了。

1 个答案:

答案 0 :(得分:-1)

我不太了解这个问题,但我认为这是解决方案。

for (int j = 0; j < messageVector.size(); j++){
  for (int i = 0; i < bookVector.size(); i++){
    bool duplicateL = false;

    size_t offset = 0;
    while (((offset = bookVector[i].find(messageVector[j], offset)) != string::npos) && (duplicateL == false)){
      cout << "Found " << messageVector[j] << " at " << i << "," << offset << std::endl;
      ++offset;
      duplicateL = true;
    }
  }
}

一个额外的变量,以便知道是否是第一次。