c++ std::string::find_last_of()是如何工作的?

j7dteeu8  于 2023-05-02  发布在  其他
关注(0)|答案(2)|浏览(138)
string s = "I Like C++ Tutorial";
cout << s.find_last_of("Like");

我知道find_last_of返回最后一个匹配的字符,但是,它返回16,这是Tutorial中字母i的位置,但我很困惑,因为我正在搜索Like的最后一个位置,而不是i,我试图从字符串中删除i。它返回5,正如我预期的那样。但问题是为什么它返回16

fiei3ece

fiei3ece1#

find_last_of查找与给定字符序列中的一个字符相等的最后一个字符。
字符序列为"Like"。最后一个L位于位置3,最后一个i位于位置16,最后一个k位于位置4,最后一个e位于位置5。所以它返回了16,这是这些值中最大的一个。
如果字符序列是"like"而不是"Like",它将返回18,因为最后一个l位于位置18
如果字符序列中没有匹配字符串中任何字母的字母,则返回npos

jq6vz3qz

jq6vz3qz2#

std::find_last_of
查找与str中的某个字符相等的最后一个字符
这意味着当在字符串“I Like C++ Tutorial”中搜索字符串“Like”时,在两个字符串中出现的最后一个字符是“i”,其位于位置16。
当搜索一个完整的字符串时,使用std::find

std::string s("I Like C++ Tutorial");
std::cout << s.find("Like"); // prints 2

如果你想找到最后一次出现的字符串使用std::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

相关问题