此问题说明如何使用单个字符分隔符将string
拆分为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::wstring
拆分为由std::vector
分隔的";"
?
答案 0 :(得分:7)
您无法在示例中使用该方法。该方法依赖于输入是空白分隔。在您的问题中,您的字符串;
分隔为"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::wcout
而不是std::cout
。
根据cppreference ctype
有两个不同的char
和wchar_t
专精,并且具有不同的功能。您不能只使用ctype<char>
更改ctype<wchar_t>
的所有出现并完成,因为ctype<wchar_t>
缺少第二个示例使用的函数