2013-08-19 8 views
7

मैं इस तरह एक विशेष सूचकांक में एक सी ++ स्ट्रिंग परिवर्तित करना चाहते हैं पर एक तार बदलने के लिए सबसे अच्छा तरीका है:सी ++, एक विशेष सूचकांक

string s = "abc"; 
s[1] = 'a'; 

निम्नलिखित कोड मान्य है? क्या यह करने का यह एक स्वीकार्य तरीका है?

http://www.cplusplus.com/reference/string/string/

कौन कहता है कि "अतिभारित [] स्ट्रिंग में ऑपरेटर" के माध्यम से हम लिखने आपरेशन प्रदर्शन कर सकते हैं:

मैं किसी भी संदर्भ जो यह मान्य है का कहना है कि नहीं मिला।

+0

प्राप्त करने के लिए इस्तेमाल कर सकते हैं-स्ट्रिंग हाँ, कोई समस्या नहीं बिल्कुल नहीं। यदि आप वास्तव में एक संदर्भ चाहते हैं, तो सी ++ 11 मानक की धारा 21.4.5/2। –

+5

उह। सी ++ 11 में यह वास्तव में मानक में दोष के कारण प्रतिबंधित है, और आप * तकनीकी रूप से * 's.begin() [1] = 'a' का उपयोग करना है; 'लेकिन इसके बारे में चिंता करने योग्य नहीं है। – Potatoswatter

+0

और आपने * एक संदर्भ पाया जो कहता है कि यह मान्य है, हालांकि cplusplus.com आमतौर पर घटिया और अक्सर पुराना होता है। लिंक को ध्यान में रखते हुए, यह स्पष्ट नहीं है कि आप और क्या जानना चाहते हैं। – Potatoswatter

उत्तर

9

हाँ, निम्नलिखित सी ++ प्रोग्राम:

#include <iostream> 

int main() { 
    std::string s = "abc"; 
    s[1] = 'a'; 
    std::cout << s; 
} 

प्रिंट aac। यदि स्ट्रिंग एस रिक्त है तो आप गलती से अन-असाइन किए गए मेमोरी को लिखते हैं। सी ++ आपको ऐसा करने देगा और यह अपरिभाषित व्यवहार की ओर जाता है।

यह करने के लिए सुरक्षित तरीका string::replace उपयोग करने के लिए होगा: http://cplusplus.com/reference/string/string/replace

+1

सुरक्षित संस्करण स्ट्रिंग :: का उपयोग करना होगा http://www.cplusplus.com/reference/string/string/replace/ – Chris

1

हां। आपके द्वारा लिंक की गई वेबसाइट के बारे में एक पृष्ठ है। आप फ़ंक्शन पर भी उपयोग कर सकते हैं, जो सीमाओं की जांच करता है।

http://www.cplusplus.com/reference/string/string/operator%5B%5D/

+1

@Potatoswatter क्यों देखें? मुद्दा यह था कि प्रोग्रामर सीमा जांच का उपयोग करना चुन सकता था। –

+0

@NeilKirk: मुझे लगता है कि यह बदल रहा है क्योंकि हर कोई सिर्फ * मान लिया * सीमाओं की जांच की जा रही थी, और 'at()' के बारे में नहीं पता था। – cHao

+2

@Potatoswatter क्या एक चेक के लिए? फ़ंक्शन को या तो वैध स्थिति (* एक * शून्य टर्मिनेटर के लिए लेखांकन) कहा जाता है या व्यवहार अपरिभाषित होता है। देखें खंड की आवश्यकता है। Cplusplus.com के लिए –

1

हाँ कोड लिखा है आप मान्य है। आप यह भी कोशिश कर सकते हैं:

string num; 
cin>>num; 
num.at(1)='a'; 
cout<<num; 

**Input**:asdf 
**Output**:aadf 

std :: प्रतिस्थापन का उपयोग charecter को प्रतिस्थापित करने के लिए भी किया जा सकता है। यहां संदर्भ लिंक http://www.cplusplus.com/reference/string/string/replace/

आशा है कि इससे मदद मिलती है।

0

आप इस

string s = "abc"; 
    string new_s = s.substr(0,1) + "a" + s.substr(2); 
    cout << new_s; 
    //you can now use new_s as the variable to use with "aac" 
संबंधित मुद्दे