将std :: wstring拆分为std :: vector

时间:2016-04-23 14:34:35

标签: c++ string vector wstring

此问题说明如何使用单个字符分隔符将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分隔的";"

1 个答案:

答案 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有两个不同的charwchar_t专精,并且具有不同的功能。您不能只使用ctype<char>更改ctype<wchar_t>的所有出现并完成,因为ctype<wchar_t>缺少第二个示例使用的函数