将 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 ctype
对 char
和 wchar_t
有两个不同的专业化,并且具有不同的功能。您不能仅将 ctype<char>
的所有出现更改为 ctype<wchar_t>
并完成,因为 ctype<wchar_t>
缺少第二个示例使用的函数
这个问题展示了如何使用 单个 字符分隔符将 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 ctype
对 char
和 wchar_t
有两个不同的专业化,并且具有不同的功能。您不能仅将 ctype<char>
的所有出现更改为 ctype<wchar_t>
并完成,因为 ctype<wchar_t>
缺少第二个示例使用的函数