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循环中该做什么。如果有人可以帮助我完成它,那就太好了。
答案 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;
}
}
}
一个额外的变量,以便知道是否是第一次。