自己写的忽略大小写查找字符串的子串的函数
来源:互联网 发布:时时彩开奖源码 编辑:程序博客网 时间:2024/05/16 17:56
忽略大小写从一个字符串中查找另一个字符串,最常用的是shlwapi.h中的StrStrI,函数原型如下:
LPTSTR StrStrI( LPCTSTR lpFirst, LPCTSTR lpSrch);
但是经过测试,这个函数效率很低,自己需要查询的数据量又很大,重新写一个吧。
// 函数功能:查找首个字符在搜索池中的偏移位置LPCTSTR __stdcall FindFirstChar(__in LPCTSTR lpszText, __in TCHAR cch){if (lpszText == NULL || lpszText[0] == _T('\0'))return NULL;if (cch == _T('\0'))return NULL;size_t nTextLen = _tcslen(lpszText);TCHAR cchText = _T('\0');for (size_t i = 0; i < nTextLen; i++){if (lpszText[i] >= 65 && lpszText[i] <= 90)// 如果是大写,转换成小写cchText = lpszText[i] + 32;elsecchText = lpszText[i];if (cch >= 65 && cch <= 90)// 如果是大写,转换成小写cch = cch + 32;if (cch == lpszText[i])return lpszText + i;}return NULL;}LPCTSTR __stdcall _StrStrI(__in LPCTSTR lpszText, __in LPCTSTR lpszPattern){if (lpszText == NULL || lpszText[0] == _T('\0'))return NULL;if (lpszPattern == NULL || lpszPattern[0] == _T('\0'))return NULL;size_t nTextLen = _tcslen(lpszText);size_t nPatternLen = _tcslen(lpszPattern);if ( nPatternLen > nTextLen )return NULL;// 查找首个字符在搜索池中的偏移位置,在数据量比较大的情况下,能有效降低时间复杂度LPCTSTR lpszStartPoint = FindFirstChar(lpszText, lpszPattern[0]);if (lpszStartPoint == NULL)return NULL;LPCTSTR lpszEndPoint = lpszText + nTextLen;for ( LPCTSTR p = lpszStartPoint; p != lpszEndPoint; p++){size_t i = 0;TCHAR cchText = _T('\0'), cchPattern = _T('\0');BOOL bFound = TRUE;for (size_t j = 0; i < nPatternLen; j++){if (lpszPattern[j] >= 65 && lpszPattern[j] <= 90)// 如果是大写,转换成小写cchPattern = lpszPattern[j] + 32;elsecchPattern = lpszPattern[j];if (p[j] >= 65 && p[j] <= 90)// 如果是大写,转换成小写cchText = p[j] + 32;elsecchText = p[j];if (cchPattern != cchText)// 匹配失败,本轮查找结束{bFound = FALSE;break;}i++;}if (bFound == TRUE)return p + i - nPatternLen;}return NULL;}
经过实测,消耗时间大约是StriStrI函数的三分之一,还是值得的。
1 0
- 自己写的忽略大小写查找字符串的子串的函数
- 忽略大小写的比较、查找
- Vim忽略大小写的查找
- 忽略大小写的字符串比较
- 忽略大小写的字符串比较
- C#忽略大小写的字符串替换(Replace)函数
- C语言 - 忽略大小写比较字符串函数的使用
- Linux忽略大小写的查找方法
- Linux下忽略大小写查找的方法
- Linux忽略大小写的查找技巧
- Python字符串比较忽略大小写的方法
- C++忽略大小写的字符串进行比较
- 宽字符串忽略大小写比较的实现
- Python字符串比较忽略大小写的方法
- 地域性与忽略大小写的字符串比较
- [00106]字符串忽略大小写的搜索替换
- noi-8174-忽略大小写的字符串比较
- Python字符串比较忽略大小写的方法
- xcom.c:(.text.startup+0x24): undefined reference to `pthread_create'的解决方法
- c#中文字符串与byte数组互相转化
- mysql从全库备份中恢复某个表
- 1 WebService 简介
- 再次理解C语言的变参
- 自己写的忽略大小写查找字符串的子串的函数
- C语言之尾队列tailq
- CSS margin合并问题
- test_gzip
- 谈话让别人舒服的程度,决定你成功的高度
- 利用poi包生成ecel文件 乐库
- ANDROID 列表布局下面少一根线
- WARNING: inbound connection timed out (ORA-3136)连接超时
- Activity 被回收之后,Fragment的堆栈变化