获取std :: string的最后一个元素

时间:2011-02-03 09:50:59

标签: c++ string

我想知道是否有缩写或更优雅的方式获取字符串的最后一个字符,如:

char lastChar = myString.at( myString.length() - 1 );

myString.back()这样的东西似乎不存在。有没有等价的?

4 个答案:

答案 0 :(得分:116)

在C ++ 11及更高版本中,您可以使用back成员函数:

char ch = myStr.back();

在C ++ 03中,std::string::back由于疏忽而无法使用,但您可以通过取消引用reverse_iterator取消rbegin来解决此问题:

char ch = *myStr.rbegin();

在这两种情况下,请注意确保字符串中至少包含一个字符!否则,您将获得未定义的行为,这是一件坏事。

希望这有帮助!

答案 1 :(得分:22)

您可能希望首先检查字符串的长度,然后执行以下操作:

if (!myStr.empty())
{
    char lastChar = *myStr.rbegin();
}

答案 2 :(得分:7)

您可以编写一个函数模板back,它委托普通容器的成员函数和一个实现字符串缺失功能的普通函数:

template <typename C>
typename C::reference back(C& container)
{
    return container.back();
}

template <typename C>
typename C::const_reference back(const C& container)
{
    return container.back();
}

char& back(std::string& str)
{
    return *(str.end() - 1);
}

char back(const std::string& str)
{
    return *(str.end() - 1);
}

然后你可以说back(foo)而不用担心foo是字符串还是向量。

答案 3 :(得分:2)

也许是{p> *(myString.end() - 1)?那也不是很优雅。

一个python-esque myString.at(-1)会过多地讨论已经臃肿的课程。