自己写的忽略大小写查找字符串的子串的函数
忽略大小写从一个字符串中查找另一个字符串,最常用的是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函数的三分之一,还是值得的。
自己写的忽略大小写查找字符串的子串的函数相关推荐
- vim 忽略大小写查找字符串
Vim 忽略大小写查找字符串 Vim被认为是高效的代码管理工具,可想而知,平时利用vim进行代码编辑的程序员是多么厉害. 一.方法一 二.方法二 方法:底行模式下,输入命令 set ignorecas ...
- vim之vim忽略大小写查找字符串
方法一: 查找时使用\c参数.进入底行模式,输入命令"/string\c " 或 "/\cstring",将会忽略大小写查找string字符串. 注意:\c与字 ...
- Bailian2721 忽略大小写比较字符串大小(POJ NOI0107-16)【字符串】
问题链接:POJ NOI0107-16 忽略大小写比较字符串大小. 忽略大小写比较字符串大小 总时间限制: 1000ms 内存限制: 65536kB 描述 一般我们用strcmp可比较两个字符串的大小 ...
- linux find 忽略大小写查找文件
find作为查找文件工具,功能强大,下面总结了忽略大小写查找文件方法,希望对大家有用. 查找命令:find 搜索路径 -iname "文件名". 注意:find 命令不能 ...
- python 字符串比较忽略大小写的方法_python实现忽略大小写对字符串列表排序的方法...
本文实例讲述了python实现忽略大小写对字符串列表排序的方法,是非常实用的技巧.分享给大家供大家参考.具体分析如下: 先来看看如下代码: string = ''' the stirng Has ma ...
- strcasecmp()--忽略大小写比较字符串
strcasecmp()的功能是:忽略大小写比较字符串 头文件 #include <strings.h> 函数原型:int strcasecmp(const char *s1, const ...
- 1.7 编程基础之字符串 16 忽略大小写的字符串比较 python
http://noi.openjudge.cn/ch0107/16/ """1.7 编程基础之字符串 16 忽略大小写的字符串比较 http://noi.openjudg ...
- 北大OJ百练——2721:忽略大小写比较字符串大小
这题很简单,就是一个大小写转换的算法,可能有一个函数专门做这个事,大家可以查查,我想应该是有的. 那么我的代码思路就是一个个去比较,不管它是大写字母还是小写字母,都一并把它们都专成小写字母,再去比较. ...
- python忽略大小写_Python字符串忽略大小写实现搜索和替换
为了针对字符串操作忽略大小写,我们可以使用re模块的时候利用re.IGNORECASE标记参数来达到效果,示例如下: #!/usr/bin/env python3 # _*_coding:utf-8_ ...
最新文章
- 别再折腾开发环境了,一劳永逸的搭建方法
- python可以自学吗-没学过编程可以自学python吗
- python中print怎么用_python的print怎么用
- Spark2内存调优总结 - 内存划分 与 内存计算 与 调参方式
- 大流量场景下如何云淡风轻地进行线上发布?
- 广西壮族自治区直流充电桩说明书下载_鄂州便携式直流充电桩
- finder怎么才能找到library
- B-TrunC标准加入ITU集群国际标准
- 【问题解决方案】Markdown正文中慎用星号否则容易变斜体
- SelectObject失败原因 cannot convert from ‘HGDIOBJ‘ to ‘CBrush‘
- Luogu1514 引水入城
- 计算机游戏优化,Win10电脑玩游戏优化方法!必须关闭这几个设置,效果提升巨大...
- Ubuntu下使用外置USB无线网卡
- Makefile 自动化变量及其说明
- SparkSteaming整合Kafka的方式
- 人工智能实践作业-修道士和野人过河问题
- tf.estimator.train_and_evaluate 详解
- 互联网数据挖掘与分析讲解
- 大型网站seo布局怎么做
- Android三大按钮,模拟Android导航栏三大金刚按键点击
热门文章
- awgn函数 matlab measure 什么意思,Matlab中 awgn 函数输入参数带有‘measured’ 时snr的含义...
- Android和win10的融合,微软Windows10更新版亮相 更好融合iOS、Android系统
- Laragon集成环境安装
- GBDT,XGBoost和LightBoost对比
- HTML5期末大作业:官网时尚购物(网站设计——美丽说官网时尚购物(1页) HTML+CSS+JavaScript 网页设计成品DW静态网页Html5响应式css3
- 后台架构设计—数据存储层
- 团队执行力(企业管理培训)
- Sencha的Eclipse插件提示和技巧
- git操作如何提出你的第一个PR
- Matlab基于元胞自动机实现NaSch模型