【问题标题】:How to use wstring find/replace for a case insensitve replacement?如何使用字符串查找/替换进行不区分大小写的替换?
【发布时间】:2021-05-01 07:58:13
【问题描述】:

这段代码非常适合字符串替换,但它区分大小写,这正是我需要的:

WCHAR *StringReplaceEx(CONST WCHAR *orig, CONST WCHAR * pattern, CONST WCHAR  *repl, WCHAR *sOut)
{
    wstring wsoriginal = orig;
    wstring wspatterntofind = pattern;
    wstring wsreplacement = repl;
    wstring wsOut = string_replace(wsoriginal, wspatterntofind, wsreplacement);

    StringCchCopy(sOut, wcslen(wsOut.c_str())+1, wsOut.c_str());

    return sOut;
}

wstring string_replace( wstring src, wstring const& target, wstring const& repl)
{
    if ((target.length() == 0) || (src.length() == 0))
        return src;
    size_t idx = 0;
    for (;;) 
    {
        idx = src.find( target, idx);
        if (idx == wstring::npos)  
            break;

        src.replace( idx, target.length(), repl);
        idx += repl.length();
    }
    return src;
}

这非常有效,但前提是字符串大小写匹配。

有没有办法进行不区分大小写的替换?

【问题讨论】:

  • 我认为Unicode表示的大多数字符集都没有区分大小写的定义。
  • @RichardCritten -- 有一个 Unicode 表可以映射小写、大写和首字母大写字符。它可用于在 Unicode 上实现不区分大小写的操作。但是,C++ 中的 Unicode 支持相当差,您必须自己实现它,很可能使用第三方 Unicode 库。

标签: c++ case-insensitive wstring


【解决方案1】:

通过使用 boost,即使它超出了问题的范围,也为我解决了问题。

【讨论】:

    猜你喜欢
    • 2013-03-14
    • 1970-01-01
    • 2011-10-26
    • 1970-01-01
    • 2010-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    相关资源
    最近更新 更多