2009-10-16 31 views
6

मुझे एन वर्णों की स्ट्रिंग बनाने का एक तरीका चाहिए। इस मामले में ascii मान शून्य।मानक टेम्पलेट स्ट्रिंग क्लास: स्ट्रिंग.फिल()

मैं जानता हूँ कि मैं निर्माता को फोन करके यह कर सकते हैं:

स्ट्रिंग sTemp (125000, 'एक');

लेकिन मैं कई जगहों पर एसटीएमपी का पुन: उपयोग करना चाहता हूं और इसे विभिन्न लंबाई से भरना चाहता हूं।

मैं एक लाइब्रेरी को कॉल कर रहा हूं जो एक स्ट्रिंग पॉइंटर और लंबाई को तर्क के रूप में लेता है और स्ट्रिंग को बाइट्स से भरता है। (मुझे पता है कि तकनीकी रूप से स्ट्रिंग संगत नहीं है, लेकिन सभी उद्देश्यों और उद्देश्यों के लिए यह है, और जल्द ही मानक बन जाएगा)। मैं एक वेक्टर का उपयोग नहीं करना चाहता।

स्ट्रिंग के निर्माण के बाद फिर से कन्स्ट्रक्टर को कॉल करने के लिए कुछ चालाक तरीका है?

उत्तर

12

string कक्षा किसी दिए गए स्ट्रिंग को एक नया मान निर्दिष्ट करने के लिए विधि assign प्रदान करती है। हस्ताक्षर

1. string& assign (const string& str); 
2. string& assign (const string& str, size_t pos, size_t n); 
3. string& assign (const char* s, size_t n); 
4. string& assign (const char* s); 
5. string& assign (size_t n, char c); 
6. template <class InputIterator> 
    string& assign (InputIterator first, InputIterator last); 

हैं हवाला देते हुए स्रोत: (। क्योंकि यह आपको सी मानक पुस्तकालयों के ++ एक बहुत सविस्तार संदर्भ देता है मैं इस वेबसाइट की सलाह देते हैं) cplusplus.com

मुझे लगता है कि आप पांचवें एक तरह कुछ के लिए देख रहे इन कार्यों में से: n आपकी स्ट्रिंग की इच्छित लंबाई और c इस स्ट्रिंग में भरे चरित्र को निर्दिष्ट करता है। उदाहरण के लिए यदि आप

sTemp.assign(10, 'b'); 

लिखते हैं तो आपकी स्ट्रिंग पूरी तरह से 10 बी के साथ भर जाएगी।

मैंने मूल रूप से एसटीएल एल्गोरिदम std::fill का उपयोग करने का सुझाव दिया लेकिन इस प्रकार आपकी स्ट्रिंग लंबाई अपरिवर्तित रहती है। विधि string::resize स्ट्रिंग के आकार को बदलने का तरीका प्रदान करता है और निर्दिष्ट वर्णों के साथ संलग्न वर्णों को भरता है - लेकिन केवल संलग्न किए गए हैं। अंत में string::assign सबसे अच्छा तरीका रहता है!

+0

क्यों नीचे मतदान? कारण के साथ कम से कम एक टिप्पणी छोड़ दें। केवल इस तरह से कोई सीख सकता है! – phlipsy

+0

मैंने डाउनवोट नहीं किया था, लेकिन यदि संभव हो तो मैं एक और # शामिल नहीं करना चाहता –

+0

जैसा कि आपने देखा है कि भरना अच्छा नहीं है क्योंकि यह स्ट्रिंग के आकार को बदलने की अनुमति नहीं देता है। आकार बदलना केवल स्ट्रिंग में नए अक्षरों को शुरू करने के लिए प्रारंभिक वर्ण का उपयोग करता है (आकार बदलने के बाद)। हजार मूल स्ट्रिंग unmodified बनी हुई है। वे "कन्स्ट्रक्टर को दोबारा कॉल करने" के वांछित प्रभाव के अनुरूप नहीं हैं। उचित कार्य असाइन किया गया है। –

3

कोशिश उपयोग करने के लिए:

sTemp.resize(newLength, 'a'); 

संदर्भ:

void __CLR_OR_THIS_CALL resize(size_type _Newsize) 
    { // determine new length, padding with null elements as needed 
    resize(_Newsize, _Elem()); 
    } 

void __CLR_OR_THIS_CALL resize(size_type _Newsize, _Elem _Ch) 
    { // determine new length, padding with _Ch elements as needed 
    if (_Newsize <= _Mysize) 
     erase(_Newsize); 
    else 
     append(_Newsize - _Mysize, _Ch); 
    } 
+1

"यह निम्नलिखित है" कह रहा है भ्रामक है। यह एक कार्यान्वयन है। – GManNickG

+0

आप सही हैं, मैं rephrased। –

+0

इसके अलावा, यह गलत आकार बदलने का कार्य है :) – GManNickG

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