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

Dev*_*eve 82 c++ string

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

char lastChar = myString.at( myString.length() - 1 );
Run Code Online (Sandbox Code Playgroud)

myString.back()似乎不存在的东西.有同等的吗?

tem*_*def 121

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

char ch = myStr.back();
Run Code Online (Sandbox Code Playgroud)

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

char ch = *myStr.rbegin();
Run Code Online (Sandbox Code Playgroud)

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

希望这可以帮助!

  • 在C++ 11中添加了一个back()函数 (12认同)

Ker*_*own 22

您可能想先检查字符串的长度,并执行以下操作:

if (!myStr.empty())
{
    char lastChar = *myStr.rbegin();
}
Run Code Online (Sandbox Code Playgroud)

  • @MarkLoeser:事实并非如此.`*myStr.end()`与`myStr [myStr.size()]`不一样!而且,即使它是,`myStr.rbegin()`相当于`myStr.end() - 1`,这在空字符串上显然是无效的. (4认同)
  • 你不必检查长度.如果它是空字符串,则只需将'\ 0'存储到lastChar中. (2认同)

fre*_*low 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);
}
Run Code Online (Sandbox Code Playgroud)

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