搜索字符串的三种方法
来源:互联网 发布:长款流苏耳环淘宝价 编辑:程序博客网 时间:2024/06/05 08:31
- if (fp==NULL)
- return;
- fseek(fp,0,SEEK_END);
- UINT nLen=ftell(fp);
- fseek(fp,0,SEEK_SET);
- // 宽字符类型
- wchar_t* pStr_Read = new wchar_t[nLen/2+1]; // 分配空间
- memset(pStr_Read,0,sizeof(wchar_t)*(nLen/2+1)); // 清空
- fread(pStr_Read,1,nLen,fp);
- fclose(fp);
FILE *fp=_tfopen(szXmlFilePath,L"rb");if (fp==NULL)return;fseek(fp,0,SEEK_END);UINT nLen=ftell(fp); fseek(fp,0,SEEK_SET);// 宽字符类型 wchar_t* pStr_Read = new wchar_t[nLen/2+1]; // 分配空间 memset(pStr_Read,0,sizeof(wchar_t)*(nLen/2+1)); // 清空 fread(pStr_Read,1,nLen,fp);fclose(fp);
pStr_Read保存的是字符串,要在这个字符串中判断 是否包含子字符串subStr
方法一:转换为CSting 使用CString::Find()
- CString xmlData=pStr_Read;
- delete []pStr_Read; // 释放空间
- if (xmlData.Find(subStr)!=-1)
- {
- //...
- }
CString subStr=L"你好";CString xmlData=pStr_Read;delete []pStr_Read; // 释放空间 if (xmlData.Find(subStr)!=-1){//...}
方法二:使用字符串搜索函数_tcsstr()
- CString subStr=L"你好";
- if (_tcsstr(pStr_Read,subStr))
- {
- //...
- }
CString subStr=L"你好";if (_tcsstr(pStr_Read,subStr)){//...}
方法三: 使用KMP匹配算法
- int next[20] ={0};
- void Next(wchar_t* p,int *next)
- {
- int len=_tcslen(p);
- int j,k;
- next[0]=-1;
- j=0;
- k=-1;
- while(j<len-1)
- {
- if(k==-1||p[j]==p[k]) //匹配的情况下,p[j]==p[k]
- {
- j++;
- k++;
- next[j]=k;
- }
- else //p[j]!=p[k]
- k=next[k];
- }
- }
- //des是目标串,pat是模式串,len1和len2是串的长度
- int kmp(wchar_t des[],int len1,wchar_t pat[],int len2)
- {
- int p=0,s=0;
- while(p < len2 && s < len1)
- {
- if(pat[p] == des[s])
- {
- p++;s++;
- }
- else
- {
- if(p==0)
- {
- s++;//若第一个字符就匹配失败,则从des的下一个字符开始
- }
- else
- {
- p = next[p];//用失败函数确定pat应回溯到的字符
- }
- }
- }
- if(p < len2)//整个过程匹配失败
- {
- return -1;
- }
- return s-len2;
- }
int next[20] ={0};void Next(wchar_t* p,int *next){int len=_tcslen(p);int j,k;next[0]=-1;j=0;k=-1;while(j<len-1){if(k==-1||p[j]==p[k]) //匹配的情况下,p[j]==p[k]{j++;k++;next[j]=k;}else //p[j]!=p[k]k=next[k];}}//des是目标串,pat是模式串,len1和len2是串的长度int kmp(wchar_t des[],int len1,wchar_t pat[],int len2){int p=0,s=0;while(p < len2 && s < len1){if(pat[p] == des[s]){p++;s++;}else{if(p==0) {s++;//若第一个字符就匹配失败,则从des的下一个字符开始}else{p = next[p];//用失败函数确定pat应回溯到的字符}}}if(p < len2)//整个过程匹配失败{return -1;}return s-len2;}
- if (kmp(pStr_Read,nLen/2,subStr,subStr.GetLength()))
- {
- //...
- }
0 0
- 搜索字符串的三种方法
- 搜索字符串的三种方法
- 字符串搜索的几种方法
- 三种字符串分组相加的方法
- 三种常用的字符串判空串方法
- SQLServer拆分字符串的三种方法
- SQLServer拆分字符串的三种方法
- 三种常用的字符串判空串方法
- 分割字符串的三种方法
- 逆转字符串的三种方法
- python 格式化字符串的三种方法
- Java字符串分割的三种方法
- 三种字符串逆序的方法
- Python 格式化字符串的三种方法
- php反转字符串的三种方法
- 字符串反转的三种方法
- 常用字符串遍历的三种方法
- 字符串反序排列的三种方法
- check if the temp is existing
- C++多线程同步效率对比之临界区和原子锁
- Android 4.4 Kitkat Phone工作流程浅析(九)__状态通知流程分析
- Remove Duplicates from Sorted Array II
- 计算器类2
- 搜索字符串的三种方法
- SQL注入类型 维基百科摘要
- oozie sqoop 定位到出错的行
- 解决Android与服务器传输中文出现乱码的问题。
- uploadify上传注意
- javascript学习-原生javascript的小特效(多个运动效果整理)
- 自定义UIPageCrontroll的圆点大小和间距
- hdu 4941 map的使用
- 答读者问(20):一个在读研究生有关在校学习的相关疑问