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

CRT是否提供类似STL中std::basic_string::find_last_not_of的函数?

CRT中对应STL find_last_not_of() 的函数情况

你说得完全对——CRT(C Runtime Library)里确实没有直接对标STL std::string::find_last_not_of() 的现成函数,也就是那种从字符串末尾反向遍历、找到第一个不属于指定字符集的字符的工具。

目前CRT提供的字符串查找工具基本都是正向搜索的,比如:

  • strcspn():返回字符串开头连续不属于指定字符集的字符长度(本质是正向找第一个匹配指定字符的位置,返回之前的长度)
  • strspn():返回字符串开头连续匹配指定字符集的字符长度
  • strchr()/strrchr():前者正向查找单个字符,后者反向查找单个字符,但都只能针对单个字符,无法处理字符集的场景

如果需要实现类似find_last_not_of()的功能,你可以自己手动实现一个,用反向遍历的逻辑就很简单。这里给个示例实现:

#include <string.h>

// 模拟find_last_not_of:返回字符串中最后一个不在指定字符集中的字符指针
char* str_find_last_not_of(const char* str, const char* reject_chars) {
    if (!str || !reject_chars) return NULL;

    const char* str_end = str + strlen(str);
    // 从字符串末尾往前逐个检查
    while (str_end > str) {
        str_end--;
        // 检查当前字符是否不在reject_chars里
        if (strchr(reject_chars, *str_end) == NULL) {
            return (char*)str_end;
        }
    }
    // 整个字符串都属于指定字符集,返回NULL
    return NULL;
}

这个函数的行为和STL的find_last_not_of()基本对齐:找到第一个(从后往前数)不在目标字符集里的字符,返回它的指针;如果所有字符都在字符集内,就返回NULL。

另外,如果你用的是微软CRT,也可以尝试先反转字符串、再用strcspn()查找,但这种方法需要注意字符串的可修改性(常量字符串不能直接反转),反而不如手动遍历来得直接可靠。

内容的提问来源于stack exchange,提问作者Anurag S Sharma

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:40:50