Ich habe mich gefragt, ob es eine Abkürzung oder eine elegantere Methode gibt, um das letzte Zeichen einer Zeichenfolge wie in:
char lastChar = myString.at( myString.length() - 1 );
So etwas myString.back()
scheint nicht zu existieren. Gibt es ein Äquivalent?
Antworten:
In C ++ 11 und höher können Sie die
back
Member-Funktion verwenden:In C ++ 03
std::string::back
ist es aufgrund eines Versehens nicht verfügbar, aber Sie können dies umgehen, indem Sie das dereferenzieren, von demreverse_iterator
Sie zurückkommenrbegin
:Achten Sie in beiden Fällen darauf, dass die Zeichenfolge tatsächlich mindestens ein Zeichen enthält! Andernfalls erhalten Sie undefiniertes Verhalten , was eine schlechte Sache ist.
Hoffe das hilft!
quelle
--std=c++11
zurback()
Verfügung steht.Sie möchten wahrscheinlich zuerst die Länge der Zeichenfolge überprüfen und Folgendes tun:
quelle
*myStr.end()
ist nicht dasselbe wiemyStr[myStr.size()]
! Und selbst wenn es so wäre,myStr.rbegin()
ist es äquivalent zumyStr.end()-1
, was für eine leere Zeichenfolge eindeutig ungültig ist.Sie können eine Funktionsvorlage schreiben
back
, die für normale Container an die Elementfunktion delegiert, und eine normale Funktion, die die fehlende Funktionalität für Zeichenfolgen implementiert:Dann können Sie einfach sagen,
back(foo)
ohne sich darum zu kümmern, obfoo
es sich um eine Zeichenfolge oder einen Vektor handelt.quelle
*(myString.end() - 1)
vielleicht? Das ist auch nicht gerade elegant.Ein Python-Esque
myString.at(-1)
würde zu viel von einer bereits aufgeblähten Klasse verlangen.quelle