2011-01-21 18 views
23

सी-शैली स्ट्रिंग को C++ std::string में परिवर्तित करने का सबसे अच्छा तरीका क्या है? अतीत में मैंने इसे stringstream एस का उपयोग करके किया है। क्या कोई बेहतर तरीका है?सी-शैली स्ट्रिंग को एक सी ++ std :: स्ट्रिंग

char* myStr = "This is a C string!"; 
std::string myCppString = myStr; 
+0

एक सीस्ट्रिंग क्या है? क्या आपका मतलब एमएफसी से 'सीएसटींग' है? या चार की एक शून्य-समाप्त सरणी (एक सी स्ट्रिंग)? या कुछ और? –

उत्तर

41

सी ++ तार एक निर्माता देता है कि आप सी-शैली तार कन्वर्ट है स्ट्रिंग क्लास: documentation आप शायद इसमें रुचि रखते हैं:

//string(char* s) 
std::string str(cstring); 

और:

//string(char* s, size_t n) 
std::string str(cstring, len_str); 
+0

और अब मुझे 'myStr को हटाएं' नहीं करना है, नहीं? –

+0

@ बरनाबासबोबोलिक्स नहीं, यह आवश्यक नहीं है। आपको केवल नए के साथ आवंटित स्मृति को हटाने की आवश्यकता है। स्ट्रिंग्स को स्ट्रिंग करने के लिए पॉइंटर्स को डिलीओकेट करने की आवश्यकता नहीं है। – templatetypedef

+0

मैं देखता हूं, इसलिए मैं सही अनुमान लगा रहा हूं, स्ट्रिंग इस char * की एक आंतरिक प्रति बनाता है। –

3

आप एक सी-स्ट्रिंग से सीधे एक std::string आरंभ कर सकते हैं::

std::string s = "i am a c string"; 
std::string t = std::string("i am one too"); 
5

के विभिन्न निर्माताओं की जाँच करें

4

आप char*std::string मतलब हैं, तो आप निर्माता का उपयोग कर सकते हैं।

char* a; 
std::string s(a); 

या अगर string s पहले से ही मौजूद हैं, बस यह लिख: (नई भंडारण की घोषणा के बिना)

s=std::string(a); 
+1

नहीं। आपका उदाहरण std :: स्ट्रिंग के कन्स्ट्रक्टर में एक तर्क त्रुटि फेंक देगा। 'ए' न्यूल नहीं हो सकता है। –

1

सामान्य तौर पर आप सिर्फ 1-आर्ग निर्माता का उपयोग कर सकते एक में सी-स्ट्रिंग को बदलने के लिए स्ट्रिंग rvalue:

string xyz = std::string("this is a test") + 
      std::string(" for the next 60 seconds ") + 
      std::string("of the emergency broadcast system."); 

बहरहाल, यह जब स्ट्रिंग का निर्माण (एक समस्या मैं सिर्फ में भाग), उदाहरण के लिए एक समारोह के संदर्भ द्वारा इसे पारित करने के काम नहीं करता है

void ProcessString(const std::string& username); 
ProcessString(std::string("this is a test")); // works. 
3

C++11: अधिभार एक स्ट्रिंग शाब्दिक ऑपरेटर

std::string operator ""_s(const char * str, std::size_t len) { 
    return std::string(str, len); 
} 

auto s1 = "abc\0\0def";  // C style string 
auto s2 = "abc\0\0def"_s; // C++ style std::string 

C++14: std::string_literals नाम स्थान से ऑपरेटर का प्रयोग करें

void ProcessString(std::string& username); 
ProcessString(std::string("this is a test")); // fails 

आप संदर्भ एक स्थिरांक संदर्भ बनाने की जरूरत है

using namespace std::string_literals; 

auto s3 = "abc\0\0def"s; // is a std::string 
संबंधित मुद्दे