2012-04-18 11 views
28

मैं कुछ बहुत आसान करने की कोशिश कर रहा हूं और फिर भी, एक घंटे के खोज के बाद मुझे एक उपयुक्त उत्तर नहीं मिल रहा है, इसलिए मुझे कुछ स्पष्ट रूप से याद आना चाहिए।सी ++ पाठ और चर की स्ट्रिंग बनाएं

मैं ifstream के साथ उपयोग के लिए गतिशील रूप से फ़ाइल नाम बनाने की कोशिश कर रहा हूं। जबकि मैं समझता हूं कि ऐसा करने के लिए विभिन्न विधियां उपलब्ध हैं, मैं एक std :: स्ट्रिंग बनाने और कॉन्स्ट में कनवर्ट करने के लिए stringname.c_str का उपयोग करने के लिए बस गया हूं।

समस्या यह है कि मुझे चर और पूर्वनिर्धारित पाठ मानों के मिश्रण के साथ स्ट्रिंग बनाने की आवश्यकता है। मुझे कंपाइलर त्रुटियां मिल रही हैं, इसलिए यह एक वाक्यविन्यास मुद्दा होना चाहिए।

छद्म

std::string var = "sometext" + somevar + "sometext" + somevar; 

धन्यवाद!

+4

यदि यह एक वाक्यविन्यास त्रुटि है या आपको वास्तविक कोड पोस्ट करना चाहिए, तो हम आपको बता सकते हैं कि सिंटैक्स त्रुटि है (और यह गलत क्यों है) और यदि आप हमें सही वाक्यविन्यास देते हैं तो आप अधिक सीखेंगे। – twain249

+0

'std :: string var = std :: string (" sometext ") + somevar +" sometext "+ somevar;' –

उत्तर

44

क्या आपने स्ट्रिंगस्ट्रीम का उपयोग करने पर विचार किया है? sprintf

#include <string> 
#include <sstream> 

std::ostringstream oss; 
oss << "sometext" << somevar << "sometext" << somevar; 
std::string var = oss.str(); 
+0

बिल्कुल + std :: ostringstream पर्याप्त होगा। – doc

+0

धन्यवाद @ एली - यह वह तरीका था जिसे मैंने शुरुआत में बिना किसी किस्मत के प्रयास किया था, लेकिन अब काम कर रहा है! क्या आप समझा सकते हैं कि ss.str() क्या कर रहा है? –

+0

'ss.str()' 'स्ट्रिंगस्ट्रीम 'की सामग्री निकाल रहा है। –

2

तुम भी उपयोग कर सकते हैं:

char str[1024]; 
sprintf(str, "somtext %s sometext %s", somevar, somevar); 
+2

हालांकि यह बहुत सुरक्षित नहीं है। इसे सुरक्षित बनाने की अतिरिक्त जटिलता शायद इसे बहुत अच्छी पसंद नहीं बनाती है। –

+0

'snprintf()' बेहतर विकल्प होगा। 'snprintf (str, 1024," somtext% s timesext% s ", somevar, somevar);' – doc

+2

यह सुरक्षित नहीं है, लेकिन * बहुत * भारी std :: स्ट्रिंग और ostringstream के साथ तुलना में आसान है। – Yury

16
std::string var = "sometext" + somevar + "sometext" + somevar; 

इसका कारण यह है अतिरिक्त बाएँ से सही और "sometext" (पहले एक) प्रदर्शन कर रहे हैं काम नहीं करता है सिर्फ एक const char * है। कॉल करने के लिए इसमें operator+ नहीं है।

std::string var = std::string("sometext") + somevar + "sometext" + somevar; 

अब, + आपरेशन के बाएँ-से-सही सूची में पहले पैरामीटर std::string है, जो एक operator+(const char *) है: सरल ठीक है। वह ऑपरेटर एक स्ट्रिंग का उत्पादन करता है, जो शेष श्रृंखला के काम को बनाता है।

तुम भी कर सकते हैं सभी कार्यों var है, जो एक std::string है और इसलिए सभी आवश्यक ऑपरेटरों है पर हो:

var = "sometext"; 
var += somevar; 
var += "sometext"; 
var += somevar; 
+1

... मानते हैं कि * कुछ * का प्रकार * ऑपरेटर + (* प्रकार *) 'सूची पर है। – doc

+0

@ डॉक यप। अन्यथा, आपको इसे काम करने के लिए 'somevar' के आस-पास कुछ कोड जोड़ना होगा।उदाहरण के लिए, यदि यह 'int' है, तो आप इसे स्ट्रिंग बनाने के लिए बूस्ट :: lexical_cast का उपयोग कर सकते हैं। (या, उस स्थिति में, 'स्ट्रिंगस्ट्रीम' समाधान बेहतर हो सकता है।) –

2

भी boost::format देखें:

#include <boost/format.hpp> 

std::string var = (boost::format("somtext %s sometext %s") % somevar % somevar).str(); 
10

में सी ++ 11 आप std::to_string का उपयोग कर सकते हैं:

std::string var = "sometext" + std::to_string(somevar) + "sometext" + std::to_string(somevar); 
संबंधित मुद्दे