सी और सी ++ डिफ़ॉल्ट रूप से बचने के क्रम के रूप में बैकस्लाश के साथ सौदा करता है। आपको अपनी स्ट्रिंग में अतिरिक्त बैकस्लैश जोड़कर अपने बैकस्लैश को एस्केप अनुक्रम के रूप में उपयोग न करने के लिए सी को बताना होगा।
\ b -
- \ एक बैकस्पेस
- \ च - formfeed
- \ N - नई लाइन
- \ आर - कैरिज रिटर्न
- \ टी - क्षैतिज टैब
- \\ - बैकस्लैश
- \ '- एकल उद्धरण चिह्न
- \ "- डबल quatation मार्क
- \ OOO - ऑक्टल प्रतिनिधित्व
- \ xDD - हेक्साडेसिमल Representaion
संपादित करें: Xcode आपकी मशीन पर असामान्य रूप से व्यवहार कर रहा है । तो मैं आपको यह सुझाव दे सकता हूं।
bool stringMatch(const char *expr, const char *str) {
// do something to compare *(expr+i) == '\\'
// In this case it is comparing against a backslash
// i is some integer
}
int main() {
string a = "a" "\x5C" "sb";
string b = "a b";
cout << stringMatch(a.c_str(), b.c_str()) << endl;
return 1;
}
string a
घोषणा में रिक्त स्थान के बारे में चिंता मत करो, Xcode एक स्थान के साथ अलग तार संयोजित करता।
संपादित करें 2: वास्तव में एक्सकोड आपके "a\\b"
को सचमुच पढ़ रहा है, इस तरह यह बच निकले बैकस्लैश से संबंधित है। जब आप कंसोल के लिए string a = "a\\sb"
आउटपुट करेंगे, तो आप देखेंगे, a\sb
। लेकिन जब आप तर्क के रूप में या निजी सदस्य के रूप में string a
पास करेंगे तो यह अतिरिक्त बैकस्लैश को सचमुच ले जाएगा। आपको इस तथ्य पर विचार करने के लिए अपना कोड डिज़ाइन करना होगा ताकि यह अतिरिक्त बैकस्लैश को अनदेखा कर सके। यह आप पर निर्भर करता है कि आप स्ट्रिंग को कैसे संभालेंगे।
संपादित करें 3:Edit 1
आपका इष्टतम उत्तर यहां है, लेकिन यहां एक और है।
एकल बैकस्लैश के साथ डबल बैकस्लाश को प्रतिस्थापित करने के लिए अपने stringMatch()
विधि में कोड जोड़ें।
तुम बस समारोह की शुरुआत में इस अतिरिक्त लाइन जोड़ने की जरूरत:
expr=[expr stringByReplacingOccurrencesOfString:@"\\\\" withString:@"\\"];
इस दोहरे बैकस्लैश समस्या का समाधान करना चाहिए।
संपादित करें 4: कुछ लोगों को लगता संपादित 3 ObjectiveC है और इस तरह नहीं इष्टतम है, तो ObjectiveC में एक और विकल्प है ++।
void searchAndReplace(std::string& value, std::string const& search,std::string const& replace)
{
std::string::size_type next;
for(next = value.find(search); // Try and find the first match
next != std::string::npos; // next is npos if nothing was found
next = value.find(search,next) // search for the next match starting after
// the last match that was found.
)
{
// Inside the loop. So we found a match.
value.replace(next,search.length(),replace); // Do the replacement.
next += replace.length(); // Move to just after the replace
// This is the point were we start
// the next search from.
}
}
संपादित 5: आप बदलना तो stringMatch()
में const char *
करने के लिए 'यह तुम्हारे लिए कम जटिल हो जाएगा स्ट्रिंग`।
expr.replace(/*size_t*/ pos1, /*size_t*/ n1, /*const string&*/ str);
पीएस आपके पास अब सभी जवाब हैं, इसलिए यह आपके ऊपर है जिसे आप कार्यान्वित करते हैं जो आपको सर्वोत्तम परिणाम देता है।
http://en.cppreference.com/w/cpp/language/escape। आपका दूसरा विकल्प एक कच्ची स्ट्रिंग शाब्दिक है, लेकिन जब तक कि आप रेगेक्स या कुछ लिख नहीं रहे हैं, तो यह थोड़ा अधिक है। – chris
"एक \\ एसबी" ठीक काम करना चाहिए। कृपया इसके साथ देखी गई समस्या पर विवरण पोस्ट करें। – bames53