2016-04-23 29 views
6

में विभाजित करना यह प्रश्न दिखाता है कि string को vector में एकल वर्ण डिलीमीटर का उपयोग करके कैसे दिखाया जाए।std :: wctor को std :: vector

प्रश्न:Right way to split an std::string into a vector

हालांकि, wstring के लिए इस तकनीक को लागू करने के रूप में आसान के रूप में मैंने सोचा था कि नहीं है। इसलिए यह निश्चित रूप से एक डुप्लिकेट नहीं है।

wstringstream stringStream(str); 
istream_iterator<wstring> begin(stringStream); 
istream_iterator<wstring> end; 
List = vector<wstring>(begin, end); 
copy(List.begin(), List.end(), ostream_iterator<wstring>(cout, ";")); 

दूसरी पंक्ति VS2015 का उपयोग कर संकलित नहीं किया जा सकता। और istream_iterator<wstring, wchar_t> का उपयोग iterator.h में एक संकलित त्रुटि का कारण बनता है।

कैसे मैं एक std::vector कि ";" से अलग किया जाता में एक std::wstring विभाजित कर सकते हैं?

उत्तर

6

आप अपने उदाहरण में विधि का उपयोग करने में सक्षम नहीं होंगे। वह विधि सफेद जगह अलग होने वाले इनपुट पर निर्भर करती है। आपके प्रश्न में आप कहते हैं कि आपके तार ;"the;quick;brown;fox" से अलग हैं। ऐसा करने के लिए आप std:getline';' के साथ स्ट्रिंग को तोड़ने के लिए डिलीमीटर के रूप में उपयोग कर सकते हैं।

std::wstring str = L"the;quick;brown;fox", temp; 
std::vector<std::wstring> parts; 
std::wstringstream wss(str); 
while(std::getline(wss, temp, L';')) 
    parts.push_back(temp); 

ऊपर भार धारा में स्ट्रिंग और फिर ';' के पर std::getline तोड़ने बुला जब तक यह धारा के अंत तक पहुँच जाता है रखना होगा।

मैं यह भी कहना है कि था अपने दूसरे उदाहरण

copy(List.begin(), List.end(), ostream_iterator<wstring>(cout, ";")); 

के रूप में डेटा आप इसे देखा है नहीं होगा विभाजित कर दिया जाएगा चाहते हैं ';' स्ट्रिंग में वापस ठीक है। std::cout के बजाय इसे std::wcout की आवश्यकता है क्योंकि आप विस्तृत वर्णों से निपट रहे हैं।

cppreference ctype के अनुसार char और wchar_t के लिए दो अलग-अलग विशेषज्ञताएं हैं और अलग-अलग फ़ंक्शन हैं। आप ctype<char> की सभी घटनाओं को केवल ctype<wchar_t> के साथ नहीं बदल सकते हैं और ctype<wchar_t> के रूप में किया जा सकता है, जो कि दूसरा उदाहरण

+0

का उपयोग करता है यह विधि "std :: string' पर"; " हालांकि। तो यह केवल एक सफेद जगह के साथ काम गलत है। लेकिन मैं अभी आपका उदाहरण आज़माउंगा। – bytecode77

+0

@ bytecode77 जो कोड आप अपने उदाहरण में दिखाते हैं वह दूसरी विधि का उपयोग नहीं कर रहा है जो अन्य पात्रों के आधार पर विभाजित हो सकता है। यदि आप उस संस्करण का उपयोग कर रहे हैं तो आपको अपना उदाहरण अपडेट करना चाहिए। – NathanOliver

+0

ओपी के नमूने में 'ostream_iterator (cout,"; ") 'में' हरा करने के लिए एक संपादन के लायक हो सकता है, वह सब ';' कर रहा है ';' वेक्टर को आउटपुट करते समय प्रत्येक स्ट्रिंग के बाद। और जब से स्ट्रिंग विभाजित होने के बाद आउटपुट होता है, तो इसका विभाजन पर कोई प्रभाव नहीं पड़ता है। – user4581301

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