Bir dizenin son karakterini elde etmenin bir kısaltma mı yoksa daha zarif bir yolu olup olmadığını merak ediyordum:
char lastChar = myString.at( myString.length() - 1 );
Görünüşe göre myString.back()yokmuş gibi bir şey . Eşdeğeri var mı?
Bir dizenin son karakterini elde etmenin bir kısaltma mı yoksa daha zarif bir yolu olup olmadığını merak ediyordum:
char lastChar = myString.at( myString.length() - 1 );
Görünüşe göre myString.back()yokmuş gibi bir şey . Eşdeğeri var mı?
Yanıtlar:
C ++ 11 ve ötesinde backüye işlevini kullanabilirsiniz :
char ch = myStr.back();
C ++ 03'te, std::string::backbir gözetim nedeniyle kullanılamaz, ancak aşağıdakilerden reverse_iteratorgeri aldığınızdan vazgeçerek bunu aşabilirsiniz rbegin:
char ch = *myStr.rbegin();
Her iki durumda da, dizenin içinde gerçekten en az bir karakter bulunduğundan emin olun! Aksi takdirde, Kötü Şey olan tanımlanmamış davranışla karşılaşırsınız .
Bu yardımcı olur umarım!
--std=c++11için back()kullanılabilir olması için.
Muhtemelen önce dizenin uzunluğunu kontrol etmek ve şöyle bir şey yapmak istersiniz:
if (!myStr.empty())
{
char lastChar = *myStr.rbegin();
}
*myStr.end()ile aynı şey değil myStr[myStr.size()]! Ve olsa bile myStr.rbegin(), eşdeğerdir myStr.end()-1, boş bir dizede açıkça geçersizdir.
backSıradan kapsayıcılar için üye işlevini temsil eden bir işlev şablonu ve dizeler için eksik işlevselliği uygulayan normal bir işlev yazabilirsiniz :
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);
}
O zaman dize mi yoksa vektör back(foo)mü fooolduğunu merak etmeden söyleyebilirsin .