Нахождение одной и той же строки внутри строки несколько раз

Как бы вы попытались найти определенную std :: string ул2, которая может находиться в std :: string str1 несколько раз, и сохранить позиции в списке или векторе? Я прошу приблизительного представления, и этого достаточно, чтобы не пытаться сохранить всю позицию слова с помощью str2.length ().

вы знаете, как найти первое появление str2 в str1? Покажите, пожалуйста, код, объясните, что вы пробовали и почему это не удалось. SO - это не сервис написания кода

463035818_is_not_a_number 10.09.2018 10:19

Я пробовал std :: find с std :: size_t, но, похоже, это работает только для одного случая. Может быть, пока не знаю метода работы

Tyron 10.09.2018 10:27

... следующий вопрос: что вы заметили, когда позвонили в std::find? Что вы передаете в качестве первого параметра (или второго параметра, если вы используете std::string::find)? ... во всяком случае, вы уже получили свой ответ;)

463035818_is_not_a_number 10.09.2018 10:31
1
3
57
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

std::string::find принимает параметр pos, который сообщает ему, где начать поиск. Таким образом, вы можете создать простой цикл, используя последнюю найденную позицию (начиная с 0):

std::vector<size_t> positions;
std::string str1{"blabliblablubla"};
std::string str2{"bla"};
size_t pos = 0;
while((pos = str.find(str2, pos)) != std::string::npos)
{
    positions.push_back(pos);
    pos++;
}
size_t pos = -1; немного дерзкий. Я имею в виду, что это работает, но здесь вы полагаетесь на очень специфическое поведение обхода.
melpomene 10.09.2018 10:31

@melpomene Действительный балл.

Max Vollmer 10.09.2018 10:37

Другие вопросы по теме