我有一个wstring
变量,我希望按空格分割它并放入vector
wstring wStr = L"Hello World !";
vector<wstring> vw;
wstring st = L"";
for (int i = 0; i < wStr.length(); i++) {
if (&wStr[i] == L" ") {
vw.push_back(st);
}
else{
st += wStr[i];
}
}
我的结果应该是vector
:
你好世界
!
但是,如果声明
,它就不会进入答案 0 :(得分:6)
那是因为你正在比较两个指针。那两个指针永远不会是一样的。而是比较字符:
if (wStr[i] == L' ') ...
在相关的说明中,这不是在空间上拆分字符串的最简单方法。试试这个:
std::wistringstream wis(wStr);
std::vector<std::wstring> wv(std::istream_iterator<std::wstring, wchar_t>(wis), {});
答案 1 :(得分:3)
wStr[i]
是i
包含的缓冲区的wStr
个字符。
&wStr[i]
是该角色的内存地址。
&wStr[i] == L" "
将字符串对象缓冲区中i
个字符的内存地址与字符串文字的内存地址进行比较。
由于字符串文字不是字符串对象的缓冲区,也不在缓冲区内,因此相等比较永远不会成立。
也许您打算比较角色的值:wStr[i] == L' '
。
答案 2 :(得分:-1)
我写了一个适用于 wstring
分词器长度超过 1 的代码:
std::vector<std::wstring> splitString(std::wstring w, std::wstring tokenizerStr) {
std::vector<std::wstring> result;
long tokeninzerLength = tokenizerStr.length();
long position = 0;
long findIndex = w.find(tokenizerStr, position);
while (findIndex != -1)
{
wstring str = w.substr(position, findIndex - position);
result.push_back(str);
position = findIndex + tokeninzerLength;
findIndex = w.find(tokenizerStr, position);
}
result.push_back(w.substr(position, w.length() - position));
return result;
}