代码审查:在非空终止的char str上查找标记反向搜索

src是一个非空终止的char字符串,其长度为data_len 。 我想从这个数组的结尾开始,找到第一次出现的html 标签。
find_pos应该用src保存标记的位置

以下代码对您来说是否正确?

 char *strrcasestr_len(const char *hay, size_t haylen, const char *ndl,size_t ndllen) { char *ret = NULL; int i; for (i = haylen - ndllen; i >= 0; i--) { if (!strncasecmp(&hay[i], ndl, ndllen)) { break; } } if (i == -1) return ret; else return (char *)&hay[i]; } 

这应该做得非常快。

 char const* find_body_closing_tag( char const* const src, size_t const data_len ) { static char table[256]; static bool inited; if (!inited) { table['<'] = 1; table['/'] = 2; table['b'] = table['B'] = 3; table['o'] = table['O'] = 4; table['d'] = table['D'] = 5; table['y'] = table['Y'] = 6; table['>'] = 7; inited = true; } for( char const* p = src + data_len - 7; p >= src; p -= 7 ) { if (char offset = table[*p]) { if (0 == strnicmp(p - (offset-1), "", 7)) return p - (offset-1); } } return 0; } 

另一个非常快速的方法是使用SIMD同时测试16个连续字符对'>' (这是memrchrmemrchr应该做的)。