string s = "I Like C++ Tutorial";
cout << s.find_last_of("Like");
我知道find_last_of返回匹配的最后一个字符,但是它返回16
,这是字母i
在Tutorial
中的位置,但是我很困惑,因为我在搜索Like
而不是i
的最后一个位置时,我尝试从字符串中删除i
。如我所料,它返回5
。但是问题是为什么它返回16
?
答案 0 :(得分:5)
find_last_of
查找等于给定字符序列中一个字符的最后一个字符。
字符序列为"Like"
。最后一个L
在位置3
,最后一个i
在位置16
,最后一个k
在位置4
,并且最后一个e
位于位置5
。因此它返回了16
,这是这些值中的最大值。
如果字符序列是"like"
而不是"Like"
,则它将返回18
,因为最后一个l
位于位置18
。
如果字符序列中没有与字符串中的任何字母匹配的字母,则返回npos
。
答案 1 :(得分:1)
查找等于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