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
相关产品推荐
相关产品推荐

