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