Подтвердить что ты не робот

Получить последний элемент std::string

Мне было интересно, есть ли аббревиатура или более элегантный способ получения последнего символа строки, например:

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

Что-то вроде myString.back(), похоже, не существует. Существует ли эквивалент?

4b9b3361

Ответ 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) будет запрашивать слишком много уже раздутого класса.