【问题标题】:using boost string algorithm with MFC CString to check for the end of a string使用带有 MFC CString 的 boost 字符串算法来检查字符串的结尾
【发布时间】:2011-04-13 14:52:29
【问题描述】:

我需要检查MFC 中的CString 对象是否以特定字符串结尾。

我知道boost::algorithm 有许多用于字符串操作的函数,而标题中的boost/algorithm/string/predicate.hpp 可以用于此目的。

我通常将此库与std::string 一起使用。你知道用CString 使用这个库的方便方法吗?

我知道该库是通用的,也可以与用作模板参数的其他字符串库一起使用,但尚不清楚(以及是否可能)将此功能应用于CString

如果可能的话,你能帮我吗?

【问题讨论】:

    标签: c++ boost mfc cstring


    【解决方案1】:

    根据Boost String Algorithms Library,“请参阅design 章节以查看支持的字符串类型的精确规范”,其中说,“字符串类型的首要要求是它必须[可以] 使用@987654323 访问@",并注意底部的 MFC/ATL 实现由 Shunsuke Sogame 编写,它应该允许您组合库。

    编辑:由于您在下面的 cmets 中提到了正则表达式,这就是您真正需要做的一切(假设是 unicode 构建):

    CString inputString;
    wcmatch matchGroups;
    wregex yourRegex(L"^(.*)$"), regex::icase);
    if (regex_search(static_cast<LPCWSTR>(inputString), matchGroups, yourRegex))
    {
        CString firstCapture = matchGroups[1].str().c_str();
    }
    

    请注意我们如何将不同的字符串类型简化为原始指针以在库之间传递它们。用您的要求替换我做作的yourRegex,包括您是否忽略大小写或明确说明锚点。

    【讨论】:

    • 谢谢肖恩!我会看看它并利用它。只是现在分享一下,我正在使用带有 MFC 字符串的 boost::regex。他们将它专门用于 MFC 字符串,我正在查看
    • 真的,您只需要利用所有字符串容器都可以简化为原始指针,因此在这种情况下,直接传递 CString 但先在其上使用static_cast&lt;LPCTSTR&gt;()
    【解决方案2】:

    您为什么不省去麻烦,直接使用CStringT::Right

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-10-18
      • 1970-01-01
      • 2013-11-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-04
      • 1970-01-01
      相关资源
      最近更新 更多