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

Splitting std::wstring into std::vector

这个问题展示了如何使用 单个 字符分隔符将 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,并用 ";" 分隔?

您将无法在示例中使用该方法。该方法依赖于白色 space 分隔的输入。在你的问题中,你说你的字符串 ;"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 ctypecharwchar_t 有两个不同的专业化,并且具有不同的功能。您不能仅将 ctype<char> 的所有出现更改为 ctype<wchar_t> 并完成,因为 ctype<wchar_t> 缺少第二个示例使用的函数