Непонятное поведение rfind()

Дано:

std::string s = "GCAGAGAG"
string sstr = s.substr(7); // = "G"

Выполняю rfind():

auto nsub = s.rfind(sstr, 6);

Получаю

nsub равен 5

Вопрос: почему так?

По логике, мы имеем: введите сюда описание изображения

Если верить @Drawn Raccoon, получаем:

введите сюда описание изображения

И ответ должен быть или 0 или 7...


Ответы (2 шт):

Автор решения: Harry

Итак,

std::string s = "GCAGAGAG"
string sstr = s.substr(7); // = "G"

Пока да.

auto nsub = s.rfind(sstr, 6);

В строке

"GCAGAGAG"

мы ищем G, начиная с 6 позиции и идя к началу строки. И видим такую букву в позиции 5...

GCAGAGAG
01234567
     ^

Что не так?...

Грубо говоря, rfind работает так: Ага, нам передано 6. Что у нас в s[6]? A - не подходит... Далее, 6-1=5. Что у нас в s[5]? G? Отлично, что искали, вернуть 5...

→ Ссылка
Автор решения: Alrott SlimRG

В дополнение у ответу выше. введите сюда описание изображения

Спасибо, @Harry

→ Ссылка