【发布时间】:2018-04-07 23:10:57
【问题描述】:
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 包含消息“test”但 bookvector 包含带有额外 t 的字母表,则输出将是:在 i 处找到 t,偏移两次,然后是消息的其余部分。这不一定是个问题,但我希望重复的字母只打印一次,其中包含一组随机坐标,其中发现选择了 t。
我在想一种方法来解决这个问题,我基本上是用伪代码完成的,我打算得到所有具有相同字符的行和偏移量,把它们放在一个容器中,随机选择一个。将找到的位置与字符一起打印到控制台,清除容器并移动到下一个字母并重新开始。但是我不知道在 while 循环中在哪里执行此操作。如果有人可以帮助我完成它,那就太好了。
【问题讨论】:
-
将
std::vector的类型替换为std::set的bookVectorvarialble 是否可以接受? Set 会自动为您删除重复项。 -
是的,我只是没怎么用过套装,所以我没有
标签: c++ vector containers