मैं सोच रहा था कि क्या एक संक्षिप्त नाम या एक स्ट्रिंग के अंतिम चरित्र को प्राप्त करने का अधिक सुरुचिपूर्ण तरीका है जैसे:
char lastChar = myString.at( myString.length() - 1 );
ऐसा कुछ myString.back()मौजूद नहीं है। क्या कोई समकक्ष है?
मैं सोच रहा था कि क्या एक संक्षिप्त नाम या एक स्ट्रिंग के अंतिम चरित्र को प्राप्त करने का अधिक सुरुचिपूर्ण तरीका है जैसे:
char lastChar = myString.at( myString.length() - 1 );
ऐसा कुछ myString.back()मौजूद नहीं है। क्या कोई समकक्ष है?
जवाबों:
C ++ 11 और उसके बाद, आप backसदस्य फ़ंक्शन का उपयोग कर सकते हैं :
char ch = myStr.back();
C ++ 03 में, std::string::backएक ओवरसाइट के कारण उपलब्ध नहीं है, लेकिन आप इसके आसपास से प्राप्त कर सकते हैं जिसे reverse_iteratorआप वापस प्राप्त करते हैं rbegin:
char ch = *myStr.rbegin();
दोनों मामलों में, यह सुनिश्चित करने के लिए सावधान रहें कि स्ट्रिंग में वास्तव में कम से कम एक चरित्र है! अन्यथा, आपको अनिर्धारित व्यवहार मिलेगा , जो एक खराब बात है।
उम्मीद है की यह मदद करेगा!
--std=c++11लिए संकलन करने के लिए g ++ को मजबूर करना पड़ा back()।
आप शायद पहले स्ट्रिंग की लंबाई की जांच करना चाहते हैं और कुछ ऐसा करना चाहते हैं:
if (!myStr.empty())
{
char lastChar = *myStr.rbegin();
}
*myStr.end()जैसा है वैसा नहीं है myStr[myStr.size()]! और, भले ही यह था, myStr.rbegin()के बराबर है myStr.end()-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यह एक स्ट्रिंग या एक वेक्टर है।