string s = "I Like C++ Tutorial"; cout << s.find_last_of("Like");
我知道find_last_of返回最后一个匹配的字符,但是,它返回16,这是Tutorial中字母i的位置,但我很困惑,因为我正在搜索Like的最后一个位置,而不是i,我试图从字符串中删除i。它返回5,正如我预期的那样。但问题是为什么它返回16?
16
Tutorial
i
Like
5
fiei3ece1#
find_last_of查找与给定字符序列中的一个字符相等的最后一个字符。字符序列为"Like"。最后一个L位于位置3,最后一个i位于位置16,最后一个k位于位置4,最后一个e位于位置5。所以它返回了16,这是这些值中最大的一个。如果字符序列是"like"而不是"Like",它将返回18,因为最后一个l位于位置18。如果字符序列中没有匹配字符串中任何字母的字母,则返回npos。
find_last_of
"Like"
L
3
k
4
e
"like"
18
l
npos
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
2条答案
按热度按时间fiei3ece1#
find_last_of
查找与给定字符序列中的一个字符相等的最后一个字符。字符序列为
"Like"
。最后一个L
位于位置3
,最后一个i
位于位置16
,最后一个k
位于位置4
,最后一个e
位于位置5
。所以它返回了16
,这是这些值中最大的一个。如果字符序列是
"like"
而不是"Like"
,它将返回18
,因为最后一个l
位于位置18
。如果字符序列中没有匹配字符串中任何字母的字母,则返回
npos
。jq6vz3qz2#
std::find_last_of
查找与str中的某个字符相等的最后一个字符
这意味着当在字符串“I Like C++ Tutorial”中搜索字符串“Like”时,在两个字符串中出现的最后一个字符是“i”,其位于位置16。
当搜索一个完整的字符串时,使用std::find
如果你想找到最后一次出现的字符串使用std::rfind
要获得最后一个匹配中最后一个字符的位置,您只需添加字符串的长度: