2010-10-11 22 views
40

यदि char* का उपयोग कर रहा है, तो मैं इसे NULL पर प्रारंभ कर सकता हूं और बाद में जांच कर सकता हूं कि यह तुलना करके सेट किया गया है या नहीं। std::string के लिए एक ही चीज़ कैसे करें? यह जांचने के लिए कि स्ट्रिंग सेट है या नहीं?कैसे जांचें कि कोई std :: स्ट्रिंग सेट है या नहीं?

संपादित करें: क्या होगा यदि मैं जिस स्ट्रिंग को सेट करता हूं वह खाली भी है? क्या मुझे यह देखने के लिए अतिरिक्त फ्लैग का उपयोग करना है कि std::string सेट है या नहीं?

+1

आप यह व्यवहार क्यों चाहते हैं? – jfs

उत्तर

71

उपयोग empty():

std::string s; 

if (s.empty()) 
    // nothing in s 
+4

क्या होता है यदि स्ट्रिंग '' " – nakiya

+2

@nakiya है: यह खाली है। 'std :: string' एक सूचक नहीं है, आप इसे शून्य निर्दिष्ट नहीं कर सकते हैं। – GManNickG

+1

यह मेरे लिए ठीक काम करता है ... 'std :: string s =" " – nakiya

3

std :: स्ट्रिंग के लिए डिफ़ॉल्ट निर्माता हमेशा एक उद्देश्य यह है कि एक अशक्त स्ट्रिंग पर सेट है देता है।

+6

स्पष्ट होने के लिए, डिफ़ॉल्ट कन्स्ट्रक्टर एक खाली स्ट्रिंग देता है, 'std :: string() == std :: string ("") ' – SingleNegationElimination

14

आप नहीं कर सकते; कम से कम उसी तरह से आप जांच सकते हैं कि कोई सूचक NULL है या नहीं।

std::string ऑब्जेक्ट हमेशा प्रारंभ होता है और हमेशा एक स्ट्रिंग होता है; डिफ़ॉल्ट रूप से इसकी सामग्री एक खाली स्ट्रिंग ("") हैं।

आप खालीपन के लिए परीक्षण कर सकते हैं (s.size() == 0 या s.empty() का उपयोग करके)।

2

std::string के लिए कोई "अनसेट" स्थिति नहीं है, यह हमेशा कुछ पर सेट है।

0

मुझे नहीं लगता कि आप std :: string class के साथ बता सकते हैं। हालांकि, अगर आपको वास्तव में इस जानकारी की ज़रूरत है, तो आप हमेशा std :: स्ट्रिंग से कक्षा प्राप्त कर सकते हैं और व्युत्पन्न वर्ग को यह बताने की क्षमता दे सकते हैं कि इसे निर्माण के बाद बदल दिया गया है (या कुछ अन्य मनमाना समय)। या बेहतर अभी तक, केवल एक नई कक्षा लिखें जो std :: स्ट्रिंग से प्राप्त होने के बाद std :: स्ट्रिंग को लपेटती है, बेस क्लास वर्चुअल विनाशक की कमी के कारण एक अच्छा विचार नहीं हो सकता है। यह शायद अधिक काम है, लेकिन इष्टतम समाधान के लिए अधिक काम की आवश्यकता होती है।

बेशक, आप हमेशा यह मान सकते हैं कि इसमें "" सेट के अलावा कुछ और है, तो यह "सेट" हो गया है, यह इसे मैन्युअल रूप से सेट करने का पता नहीं लगाएगा।

+1

आमतौर पर मानक लाइब्रेरी कंटेनर से सार्वजनिक रूप से प्राप्त करना एक बुरा विचार है क्योंकि वे नहीं करते हैं आभासी विनाशक है। एक सदस्य चर के रूप में 'std :: string' को encapsulate करना बेहतर होगा। –

+0

@ जेम्स मैकनेलिस: मैं उस बिंदु को देख सकता हूं। मैं इसे जवाब में शामिल करूंगा। – PatrickV

19

जैसा कि कई उत्तरों ने इंगित किया है, std::string के मूल्य के लिए 'शून्यता' की कोई अवधारणा नहीं है। यदि रिक्त स्ट्रिंग का उपयोग इस तरह के मान के रूप में पर्याप्त नहीं है (यानी, आपको उस स्ट्रिंग के बीच अंतर करने की आवश्यकता है जिसमें कोई वर्ण नहीं है और कोई स्ट्रिंग जिसके पास कोई मूल्य नहीं है), तो आप std::string* का उपयोग कर सकते हैं और इसे NULL पर सेट कर सकते हैं उपयुक्त के रूप में वैध std::string उदाहरण।

आप किसी भी std::string उद्देश्य यह है कि आप के लिए सूचक सेट के जीवनकाल प्रबंधित करने में मदद करने के लिए स्मार्ट सूचक प्रकार (बढ़ावा :: scoped_ptr या कुछ और) किसी प्रकार का उपयोग कर सकते हैं।

+4

आप 'बूस्ट :: वैकल्पिक ' का भी उपयोग कर सकते हैं। टेम्पलेट 'बूस्ट :: वैकल्पिक ' उन प्रकारों के लिए "नल-नेस" का समर्थन करने के लिए ठीक है, जो स्वाभाविक रूप से नहीं हैं। – MSalters

संबंधित मुद्दे