string s = "I Like C++ Tutorial";
cout << s.find_last_of("Like");
Я знаю, что find_last_of возвращает последний совпадающий символ, однако он возвращает 16, то есть позицию буквы i в Tutorial, но я сбит с толку, потому что ищу последнюю позицию Like, а не i, я пытался удалить i из строки. Он возвращает 5, как я и ожидал. Но вопрос, почему оно вернулось 16?





find_last_of находит последний символ, равный одному из символов в заданной последовательности символов.
Последовательность символов "Like". Последний L находится в позиции 3, последний i находится в позиции 16, последний k находится в позиции 4 и последний e находится в позиции 5. Таким образом, он вернул 16, наибольшее из этих значений.
Если бы последовательность символов была "like" вместо "Like", она бы вернула 18, потому что последняя l находится в позиции 18.
Если в последовательности символов нет ни одной буквы, совпадающей с какой-либо буквой в строке, возвращается npos.
Возможно, вы захотите отметить, что он делает в случае, если элемент не найден, например. поиск "Нравится" не находит 's'
Правда ли, что npos равно -1? можно ли так считать?
Finds the last character equal to one of characters in str
это означает, что при поиске строки "I Like C++ Tutorial" для строки "Like" последним символом, который появляется в обеих строках, является "i", который находится в позиции 16.
при поиске полной строки используйте станд:: найти
std::string s("I Like C++ Tutorial");
std::cout << s.find("Like"); // prints 2
если вы хотите найти последнее вхождение строки, используйте стандартный:: rfind
std::string s("I Like C++ Tutorial Like");
std::cout << s.rfind("Like"); // prints 20
чтобы получить позицию последнего символа в последнем совпадении, вам просто нужно добавить длину строки:
std::string s("I Like C++ Tutorial Like");
std::string s2("Like");
std::cout << s.rfind(s2) + s2.length(); // prints 24
прочитайте документы, чтобы понять, почему
find_last_ofведет себя таким образом, вам нуженrfind, если вы хотите сопоставить подстроку в строке с конца