You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++是否存在不区分大小写的strrchr、wcsrchr版本以简化字符串后缀判断?

代码简化方案

方案1:利用系统内置不区分大小写的字符查找函数

Windows MSVC 环境下提供了现成的不区分大小写字符查找函数,不需要自行封装即可直接使用:

  • 多字节字符串(ANSI/UTF-8)场景:用 _strichr 替代 strchr,_strirchr 替代 strrchr
  • 宽字符(UTF-16)场景:用 _wcsichr 替代 wcschr,_wcsirchr 替代 wcsrchr

简化后的多字节版本代码:

_strirchr(variable.data(), expression[0]) && _stricmp(_strirchr(variable.data(), expression[0]), expression.data()) == 0

简化后的UTF-16宽字符版本代码:

_wcsirchr(variable.data(), expression[0]) && _wcsicmp(_wcsirchr(variable.data(), expression[0]), expression.data()) == 0

方案2:兼容低版本运行时的精简写法

如果你的编译环境不支持上述内置查找函数,可以用临时变量合并重复查找逻辑,不需要封装自定义函数,同时减少重复调用的性能损耗:

  • 多字节版本:
const char* match_pos = strrchr(variable.data(), tolower(expression[0]));
match_pos = match_pos ? match_pos : strrchr(variable.data(), toupper(expression[0]));
match_pos && _stricmp(match_pos, expression.data()) == 0
  • 宽字符版本:
const wchar_t* match_pos = wcsrchr(variable.data(), towlower(expression[0]));
match_pos = match_pos ? match_pos : wcsrchr(variable.data(), towupper(expression[0]));
match_pos && _wcsicmp(match_pos, expression.data()) == 0

注:上述写法直接嵌入逻辑块即可使用,不需要额外定义自定义方法,适配VS扩展的编译限制。

内容的提问来源于stack exchange,提问作者ojesseus1

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 11:51:01