c++ library الحصول على العنصر الأخير من سلسلة std::



string length c++ (4)

في C ++ 11 ، يمكنك استخدام وظيفة العضو back :

char ch = myStr.back();

في C ++ 03 ، std::string::back غير متوفر نظرًا لوجود إشراف ، ولكن يمكنك التغلب على هذا عن طريق إلغاء الإشارة إلى reverse_iterator الذي ستعود إليه من rbegin :

char ch = *myStr.rbegin();

أتمنى أن يساعدك هذا!

كنت أتسائل إذا كان هناك اختصار أو طريقة أكثر أناقة للحصول على آخر حرف لسلسلة كما في:

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

شيء مثل myString.back() لا يبدو موجودًا. هل هناك ما يعادلها؟


Answer #1

يمكنك كتابة قالب وظيفة 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 هو سلسلة أو متجه.


Answer #2

من المحتمل أن ترغب في التحقق من طول السلسلة أولاً وأن تفعل شيئًا كالتالي:

if (!myStr.empty())
{
    char lastChar = *myStr.rbegin();
}

Answer #3

*(myString.end() - 1) ربما؟ هذا ليس بالضبط أنيق سواء.

سوف تطلب myString.at(-1) python-esque الكثير من فئة متضخمة بالفعل.





string