我有一个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)
结果是:
我不明白为什么最后一个字符总是被分割成另一个标记...
在您的代码中,问号出现在单独的行上,因为默认情况下,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