如何拆分字符串

How to split a wstring

本文关键字:字符串 拆分 何拆分      更新时间:2023-10-16

我有一个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


你好
世界

但它没有进入 if 语句

那是因为你正在比较两个指针。这两个指针永远不会相同。而是比较字符

if (wStr[i] == L' ') ...

相关说明中,这不是在空间上拆分字符串的最简单方法。试试这个:

std::wistringstream wis(wStr);
std::vector<std::wstring> wv(std::istream_iterator<std::wstring, wchar_t>(wis), {});

wStr[i]wStr包含的缓冲区的第i个字符。

&wStr[i]是该字符的内存地址。

&wStr[i] == L" "字符串对象的缓冲区中第 i 个字符的内存地址与字符串文本的内存地址进行比较。

由于字符串文本不是字符串对象的缓冲区,也不是缓冲区内的缓冲区,因此相等比较永远不会成立。

也许您打算比较字符的值:wStr[i] == L' ' .

我写了一个适用于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;
}