std :: find_last_of实际如何工作?

时间:2019-03-22 09:35:25

标签: c++ string

string s = "I Like C++ Tutorial";
cout << s.find_last_of("Like"); 

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

2 个答案:

答案 0 :(得分:5)

find_last_of查找等于给定字符序列中一个字符的最后一个字符。

字符序列为"Like"。最后一个L在位置3,最后一个i在位置16,最后一个k在位置4,并且最后一个e位于位置5。因此它返回了16,这是这些值中的最大值。

如果字符序列是"like"而不是"Like",则它将返回18,因为最后一个l位于位置18

如果字符序列中没有与字符串中的任何字母匹配的字母,则返回npos

答案 1 :(得分:1)

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