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

问题描述 投票:7回答:1

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

c++ string vector wstring
1个回答
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,ctypecharwchar_t有两种不同的专业,并且具有不同的功能。你不能只用ctype<char>改变ctype<wchar_t>的所有出现并且因为ctype<wchar_t>缺少第二个例子使用的函数

© www.soinside.com 2019 - 2024. All rights reserved.