Получить последний элемент std:: string
мне было интересно, есть ли аббревиатура или более элегантный способ получить последний символ строки, например:
char lastChar = myString.at( myString.length() - 1 );
что-то вроде myString.back()
Кажется, не существует. Есть ли эквивалент?
4 ответа:
в C++11 и выше, вы можете использовать
back
функции:char ch = myStr.back();
В C++03,
std::string::back
недоступно из-за недосмотра, но вы можете обойти это, разыменовавreverse_iterator
вы возвращаетесь изrbegin
:char ch = *myStr.rbegin();
в обоих случаях будьте осторожны, чтобы убедиться, что строка на самом деле имеет по крайней мере один символ в нем! В противном случае, вы получите неопределенное поведение, что очень плохо.
надеюсь, что это помогает!
вы, вероятно, хотите сначала проверить длину строки и сделать что-то вроде этого:
if (!myStr.empty()) { char lastChar = *myStr.rbegin(); }
вы можете написать шаблон функции
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
- строка или вектор.