2012-04-04 17 views
19

के बीच एक 'std :: string` का एक सबस्ट्रिंग प्राप्त करना मेरे पास एक प्रोग्राम है जो फ़ॉर्म (पी 1, पी 2, पी 3, ...) में संभाव्यताओं को निर्दिष्ट करने के लिए कुछ विकल्प इनपुट के रूप में लेने की उम्मीद है। तो कमांड लाइन उपयोग सचमुच होगा:दो iterators

./myprog -dist (0.20, 0.40, 0.40) 

मैं C++ इस तरह सूचियों पार्स करने के लिए करना चाहते हैं और मैं वर्तमान में std :: स्ट्रिंग प्रकार और बूस्ट द्वारा प्रदान की विभाजन समारोह के लिए iterators के साथ यह करने के लिए कोशिश कर रहा हूँ।

// Assume stuff up here is OK 
std::vector<string> dist_strs; // Will hold the stuff that is split by boost. 
std::string tmp1(argv[k+1]); // Assign the parentheses enclosed list into this std::string. 

// Do some error checking here to make sure tmp1 is valid. 

boost::split(dist_strs, <what to put here?> , boost::is_any_of(", ")); 

<what to put here?> भाग से ऊपर नोट करें। जब से मैं शुरुआत और अंत कोष्ठक की अनदेखी करने की जरूरत है, मैं की तरह

tmp1.substr(++tmp1.begin(), --tmp1.end()) 

कुछ करना चाहता हूँ, लेकिन यह काम करता है substr इस तरह की तरह नहीं दिखता है, और मैं प्रलेखन कि यह करने के लिए काम करता है में एक समारोह नहीं मिल सकता है ।

एक विचार मैं था इटरेटर गणित करते हैं, अगर यह अनुमति दी है, और substr का उपयोग

tmp1.substr(++tmp1.begin(), (--tmp1.end()) - (++tmp1.begin())) 

कॉल करने के लिए किया गया था लेकिन मुझे यकीन है कि अगर यह अनुमति दी है नहीं था, या अगर यह करने के लिए एक उचित तरीका है कर दो। यदि यह वैध दृष्टिकोण नहीं है, तो बेहतर क्या है? ...अग्रिम में बहुत धन्यवाद।

उत्तर

39

std::string के निर्माता को आपको आवश्यक कार्यक्षमता प्रदान करनी चाहिए।

std::string(tmp1.begin() + 1, tmp1.end() - 1) 
संबंधित मुद्दे