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循环中该做什么。如果有人可以帮助我完成它,那就太好了。
样本输出
Found H at 1,0
Found H at 3,9
Found E at 0,4
Found L at 1,4
Found L at 1,4
Found O at 1,7
bookVector是
ABCDE FG, HIJKLMNO, PQRSTUVWXYZ, TDASDGKSDH
MessageVector是 H,E,L,L,O
答案 0 :(得分:0)
你应该跟踪你已经找到的字母,这可以通过使用来完成 在寻找信件之前检查它,如果存在,你可以跳过这封信。如果没有将它添加到集合并开始查看bookVector。