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;
}
}
}
проблема, с которой я столкнулся с этим кодом, заключается в том, что если вектор книги содержит повторяющуюся букву, буква будет напечатана оба раза с обеих позиций. поэтому, если messageVector содержит сообщение «тест», а bookvector содержит алфавит с дополнительной буквой t, вывод будет таким: найдено t в точке i, смещено два раза, а затем остальная часть сообщения. Это не обязательно проблема, но я бы хотел, чтобы повторяющиеся буквы печатались только один раз со случайным набором координат, где был выбран t.
Я думал о способе решения проблемы, я в основном сделал это в псевдокоде, я собирался получить все строки и смещения, которые имеют один и тот же символ, поместить их в контейнер, выбрать случайный. выводим найденные позиции в консоль с персонажем, очищаем контейнер и переходим к следующей букве и делаем все заново. Однако я не знаю, где это сделать в цикле while. Было бы здорово, если бы кто-нибудь помог мне пройти через это.
Допустимо ли решение, когда вы заменяете тип с
std::vector
наstd::set
для переменнойbookVector
? Set автоматически удалит дубликаты для вас.да, я просто не использовал наборы, поэтому я не