2011-11-28 18 views
6

उदाहरण के लिए होता है पर लौटने के लिए, अगर मैं इस छोटे से कार्य हो:कैसे स्ट्रिंग कि स्ट्रिंग/पूर्णांक चर

string lw(int a, int b) {  
    return "lw $" + a + "0($" + b + ")\n"; 
} 

.... और मेरा मुख्य समारोह में कॉल lw(1,2) बनाने मैं इसे "lw $1, 0($2)" वापस जाने के लिए चाहते हैं। invalid operands of types ‘const char*’ and ‘const char [11]’ to binary ‘operator+’

क्या मैं गलत कर रहा हूँ:

लेकिन मैं एक त्रुटि प्राप्त हो रही? मैंने कक्षा से एक उदाहरण की काफी प्रतिलिपि बनाई है, और इसे मेरे कार्य के अनुरूप बदल दिया है।

उत्तर

10

आप तारों के पूर्णांक को जोड़ना चाहते हैं, और सी ++ ऐसे विभिन्न प्रकार के मानों को परिवर्तित नहीं कर सकता है।

#include <sstream> 

// ... 

string lw(int a, int b) 
{ 
    ostringstream os; 
    os << "lw $" << a << "0($" << b << ")\n"; 
    return os.str(); 
} 

आप Boost है, तो आप Boost.Lexical_cast उपयोग कर सकते हैं:

#include <boost/lexical_cast.hpp> 

// ... 

string lw(int a, int b) 
{ 
    return 
     string("lw $") + 
     boost::lexical_cast<std::string>(a) + 
     string("0($") + 
     boost::lexical_cast<std::string>(b) + 
     string(")\n"); 
} 

और अब के साथ सी ++ 11 और बाद में वहाँ आपका सर्वश्रेष्ठ दांव std::ostringstream उपयोग करने के लिए परिणाम स्ट्रिंग के निर्माण के लिए है std::to_string है:

string lw(int a, int b) 
{ 
    return 
     string("lw $") + 
     std::to_string(a) + 
     string("0($") + 
     std::to_string(b) + 
     string(")\n"); 
} 
+0

बहुत अच्छा काम किया, धन्यवाद। – Rima

+0

आपकी पहली वाक्य सही है, लेकिन यह प्रश्न के लिए पूरी तरह से अप्रासंगिक है क्योंकि ओपी 'std :: string' को संगत नहीं कर रहा है। –

+0

@ मार्कबा आप सही हैं। उम्मीदवारों को उम्मीद है कि यह स्पष्ट हो जाएगा। –

1

आप स्ट्रिंग अक्षर (जैसे "हैलो") को पूर्णांक में नहीं जोड़ सकते हैं। यही संकलक आपको बताता है। यह आपके प्रश्न का आंशिक उत्तर है। आप किसी अन्य पोस्ट में जो चाहते हैं उसे पूरा करने के लिए देखें।

+0

वास्तव में आप * char * और 'char *' दोनों को पूर्णांक में जोड़ सकते हैं। यह सिर्फ इतना है कि अधिकांश समय जो आप चाहते हैं उस पर नहीं करते हैं। –

+0

@ मार्कब मैं अपना जवाब सुधारूंगा। – Beginner

2
#include <sstream> 

string lw(int a, int b) {  
    std::string s; 
    std::stringstream out; 
    out << "lw $" << a << "0($" << b << ")" << endl; 
    s = out.str(); 
    return s; 
} 
+0

काम करता है, लेकिन आप 'out.str()' की एक अतिरिक्त स्थानीय प्रतिलिपि के लिए भुगतान कर रहे हैं ... वह प्रतिलिपि क्यों बनाते हैं? (इसके अलावा मैं कुछ ऐसा बता दूंगा जिसे मैंने हाल ही में नहीं सीखा था, जो कि सामान्य मामले में 'एंडल' '' \ n "' के लिए समानार्थी नहीं है - यह स्ट्रीम को फ्लश करता है। इसलिए मैंने बंद कर दिया है 'endl' का उपयोग करने के लिए \" \ n "' के उपयोग को "tidying" ...) – HostileFork

2

एक ostringstream का उपयोग करें:

#include <sstream> 
... 
string lw(int a, int b) { 
    std::ostringstream o; 
    o << "lw $" << a << "0($" << b << ")\n"; 
    return o.str(); 
} 
0

इस सवाल समझने के लिए, आप को पता है कि सी ++ में, "lw $" तरह स्ट्रिंग शाब्दिक रूप में सी भाषा से विरासत में मिली const char[] रूप में माना जाता है। हालांकि इसका मतलब है कि आप केवल ऑपरेटर प्राप्त करते हैं जो सरणी के लिए परिभाषित होते हैं, या इस मामले में सरणी-गिरावट-से-सूचक मामले।

तो क्या होता है कि आपके पास एक स्ट्रिंग अक्षर है, और उसके बाद एक नया सूचक बनाने के लिए एक पूर्णांक जोड़ें। फिर आप अन्य स्ट्रिंग अक्षर जोड़ने का प्रयास करते हैं जो फिर से char* तक गिर जाता है। आप दो पॉइंटर्स को एक साथ जोड़ नहीं सकते हैं, जो तब आप जो त्रुटि देख रहे हैं उसे उत्पन्न करता है।

आप कुछ सीमित पाठ के साथ एक स्ट्रिंग प्रारूप में पूर्णांक स्वरूपित करने का प्रयास कर रहे हैं। सी ++ में ऐसा करने का वैधानिक तरीका स्ट्रिंगस्ट्रीम के साथ है:

#include <sstream> 

string lw(int a, int b) 
{ 
    std::ostringstream os; 
    os << "lw $" << a << "0($" << b << ")\n"; 
    return os.str(); 
} 
संबंधित मुद्दे