通过指定的分隔符分割wstring

Ste*_*ano 4 c++ string split

我有一个std :: wstring变量,其中包含文本,我需要用分隔符将其拆分。我该怎么办?我不会使用会产生一些警告的Boost。谢谢

编辑1, 这是一个示例文本:

你好你好吗?

这是代码:

typedef boost::tokenizer<boost::char_separator<wchar_t>, std::wstring::const_iterator, std::wstring> Tok;

boost::char_separator<wchar_t> sep;

Tok tok(this->m_inputText, sep);

for(Tok::iterator tok_iter = tok.begin(); tok_iter != tok.end(); ++tok_iter)
{
    cout << *tok_iter;
}
Run Code Online (Sandbox Code Playgroud)

结果是:

  1. 你好
  2. 怎么样

我不明白为什么最后一个字符总是被分割成另一个标记...

Cub*_*bbi 5

在您的代码中,问号出现在单独的行上,因为默认情况下,boost :: tokenizer的工作方式就是这样。

如果您希望的输出是四个令牌(“ hi”,“ how”,“ are”和“ you?”),则可以

a)更改您正在使用的char_separator

boost::char_separator<wchar_t> sep(L" ", L"");
Run Code Online (Sandbox Code Playgroud)

b)boost::split我认为这是“按指定字符分割字符串”的最直接答案

#include <string>
#include <iostream>
#include <vector>
#include <boost/algorithm/string.hpp>

int main()
{

        std::wstring m_inputText = L"hi how are you?";

        std::vector<std::wstring> tok;
        split(tok, m_inputText, boost::is_any_of(L" "));

        for(std::vector<std::wstring>::iterator tok_iter = tok.begin();
                        tok_iter != tok.end(); ++tok_iter)
        {
                std::wcout << *tok_iter << '\n';
        }

}
Run Code Online (Sandbox Code Playgroud)

测试运行:https//ideone.com/jOeH9