【问题标题】:tokenizing wide string using boost使用 boost 标记宽字符串
【发布时间】:2011-12-28 03:50:09
【问题描述】:

我正在使用 boost 标记一个宽字符串,但它不起作用。这是我的代码:

using namespace std;
vector<wchar_t> vDep;
vector<wchar_t> vArr;
TStringList *slDep;
TStringList *slArr;
wchar_t *chDep;
wchar_t *chArr;
int sz=0;
for (int i = 0; i < mDep->Lines->Count; i++) {
    chDep=WideString(mDep->Lines->Strings[i]).c_bstr();
    ShowMessage(chDep);
    boost::split(vDep,chDep,boost::is_any_of(std::wstring((wchar_t*)" ")));
    sz=vDep.size();
    for (int j = 0; j < vDep.size(); j++) {
        ShowMessage(vDep[j]);
    }
}

我希望看到一个关于标记宽字符串的工作示例。

boost 是标记宽字符串的最佳选择,还是有其他选择?

【问题讨论】:

  • “It's not working”不是一个好的问题描述。
  • 它显示异常Assertion failed: !is_singular() ../boost/range/iteratorator_range.hpp
  • 另外,不要将 " " 转换为 wchar_t*,而是使用宽字符串文字 L" "
  • 这是因为我在is_any_of()中使用std::wstring()而不是std::string()
  • 是的,对于宽字符串,使用宽文字。

标签: c++ boost c++builder c++builder-2010


【解决方案1】:

将目标改为std::vector&lt;std::wstring&gt;,将源改为std::wstring,分隔符可以是普通的宽字符串;

std::vector<std::wstring> target;
std::wstring source = ...;
boost::split(target, source, boost::is_any_of(L" ")));

【讨论】:

  • 下面的代码using namespace std; vector&lt;std::wstring&gt; vDep; std::wstring chDep=UnicodeString("asdf asdf asdf ").w_str(); boost::split(vDep,chDep,boost::is_any_of(L" "));不会编译!
  • 这是错误Assertion failed: !is_singular() ../boost/range/iteratorator_range.hpp
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多