2010-04-08 19 views
14

मुझे सी ++ (यदि संभव हो) में निम्नलिखित सी # कोड करने की आवश्यकता है। मुझे बहुत सारे फ्रेकिंग कोट्स और इसमें अन्य सामानों के साथ एक लंबी स्ट्रिंग रखना होगा।स्ट्रिंग अक्षर सी ++?

const String _literal = @"I can use "quotes" inside here"; 
+1

फ़ाइल से इतनी लंबी स्ट्रिंग क्यों लोड नहीं करें? – GManNickG

उत्तर

5

सी ++ में कोई कच्ची स्ट्रिंग अक्षर नहीं है। आपको अपने स्ट्रिंग अक्षर से बचने की आवश्यकता होगी। जब यह उपलब्ध है

std::string str = "I can use \"quotes\" inside here"; 

C++ 0x एक कच्चे स्ट्रिंग शाब्दिक प्रदान करता है:

R"C:\mypath" 

जिस तरह से आप एक प्रमुख के साथ कोई नाम नहीं चाहिए द्वारा रेखांकित के रूप में इस तरह के पहचानकर्ता आरक्षित हैं सी ++ में।

+0

अंडरस्कोर से शुरू होने वाले नाम और फिर किसी पूंजी पत्र के बाद किसी भी उपयोग के लिए कार्यान्वयन के लिए आरक्षित हैं, इसलिए आप उनका उपयोग नहीं कर सकते हैं। सामान्य रूप से अंडरस्कोर से शुरू होने वाले नाम केवल वैश्विक नामस्थान में नाम के रूप में आरक्षित हैं। –

+1

@ ब्रायन - कच्चे तार का उपयोग ब्रांड्स 'आर' (सी: \ mypath) "' –

2

सी ++ में ऐसी कोई व्यवस्था नहीं है। भागने का उपयोग करके आपको इसे पुराने तरीके से करना होगा।

हालांकि आप भागने वाले भाग को थोड़ा आसान बनाने के लिए एक स्क्रिप्टिंग भाषा का उपयोग करने में सक्षम हो सकते हैं। उदाहरण के लिए, रूबी में %Q ऑपरेटर एक सही तरीके से छोड़े डबल-कोटेड स्ट्रिंग वापस आ जाएगी जब irb में इस्तेमाल किया:

irb(main):003:0> %Q{hello "world" and stuff  with tabs} 
=> "hello \"world\" and stuff\twith\ttabs" 
+0

"क्या आप गंभीर रूप से स्ट्रिंग से बचने के लिए अपने सी ++ प्रोग्राम में रूबी दुभाषिया को एम्बेड करने का सुझाव दे रहे हैं? – jalf

+0

@jalf: बिलकुल नहीं! मैं स्ट्रिंग को एक बार रूबी में पेस्ट करने का सुझाव दे रहा था, फिर उस परिणाम को वापस अपनी स्रोत फ़ाइल में पेस्ट करें। मैं देख सकता हूं कि उस हास्यास्पद तरीके से मेरा जवाब कहां से व्याख्या किया जा सकता है। मुझे शिक्षित करने के लिए –

7

सी # के "@" C++ का कोई बराबर है।

const char *_literal = "I can use \"quotes\" inside here"; 
35

सी ++ 03 (वर्तमान मानक) में उपलब्ध नहीं है यही कारण है कि: इसे प्राप्त करने के लिए एक ही रास्ता ठीक से स्ट्रिंग से बचने के लिए है।

यह सी ++ 0x ड्राफ्ट मानक का हिस्सा है लेकिन यह अभी तक आसानी से उपलब्ध नहीं है।

अभी के लिए, तुम सिर्फ यह स्पष्ट रूप से उद्धृत करने के लिए है:

const std::string _literal = "I have to escape my quotes in \"C++03\""; 

एक बार C++ 0x वास्तविकता बन जाता है, तो आप लिखने के लिए सक्षम हो जाएगा:

const std::string _literal = R"(but "C++0x" has raw string literals)"; 

और जब आप )" की जरूरत आपके शाब्दिक में:

const std::string _literal = R"DELIM(more "(raw string)" fun)DELIM"; 
+7

+1। – paxdiablo

+0

@ पक्सडीब्लो - आपका स्वागत है। एक तरफ ध्यान दें, मेरा पहला उदाहरण गलत था। कच्चे तार का उपयोग ब्रांड्स का उपयोग होता है, स्क्वायर ब्रैकेट को डिलीमीटर के रूप में नहीं। इसके अलावा कच्चे तारों में अधिक लचीलापन होता है, तो मेरा उदाहरण दिखाता है (आप एक डिलीमीटर जोड़ सकते हैं ताकि आप वास्तविक स्ट्रिंग में '' 'डाल सकें।' 'DELIM भाग के लिए –

+0

+1, वास्तव में उपयोगी है। – qed

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