如何在C++中获取由“::”分隔的令牌化字符串的最后一个元素?

8

我是一个 C++ 开发者,

我有一个字符串如下:

string str = "rake::may.chipola::ninbn::myFuntion";

如何获取上述字符串中的最后一个元素,该元素始终在“::”的最后一次出现之后?
1个回答

18

使用std::string::rfind()函数查找最后一次出现的::,并使用std::string::substr()函数提取该标记:

// Example without confirming that a '::' exists.
std::string last_element(str.substr(str.rfind("::") + 2));

一个小提醒:rfind 可能会返回 std::string::npos,当加上 + 2 后可能会产生溢出。如果输入字符串为 "rake",那么这个表达式的结果很可能是 "ake"。这真的很不幸。 - Matthieu M.
@MatthieuM.,我在代码片段中指出它没有确认::是否存在。OP 应该 检查rfind()的结果不是string::npos,并且rfind() + 2 < str.length() - hmjd
如果你可以使用 rfind(":") + 1,那么它就会起作用,因为 std :: string :: npos + 10 - Simon Kraemer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接