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
。
static const size_type npos = -1;
,但是单独的 -1
是 int
类型,而不是 std::string::size_type
。 - Caleth查找与字符串str中任一字符相等的最后一个字符
这意味着在字符串"I Like C++ Tutorial"中搜索字符串"Like"时,两个字符串中最后出现的相同字符是位于位置16的"i"。
如果要搜索完整字符串,请使用std::find。
std::string s("I Like C++ Tutorial");
std::cout << s.find("Like"); // prints 2
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
。 - EdChum