查找字符串,字符串的模式匹配算法

hanyekanxue 2010-09-06 11:20:57
有两个字符串,例如:
s1=“jhefiektju2fwjq3n3the”
s2=“fwjq3”
要求在s1中查找s2,如果没有找到return -1,如果匹配成功则返回s2在s1中的位置。
哪位前辈给点代码我看看啊?
...全文
92 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
llh1982 2010-09-25
  • 打赏
  • 举报
回复
不错。顶一下
nwao7890 2010-09-07
  • 打赏
  • 举报
回复
学习了KMP
shi3590 2010-09-07
  • 打赏
  • 举报
回复

int instr(char *source, char *pattern)
{
char *tmp=NULL;

tmp = strstr(source, pattern);

if(tmp == NULL)
return(-1);
else
return((source > tmp) ? (source - tmp + 1) : (tmp - source + 1));
}
Rain208 2010-09-07
  • 打赏
  • 举报
回复
学习楼上的了。
chainyu 2010-09-07
  • 打赏
  • 举报
回复
可以用search(_FwdIt1 _First1, _FwdIt1 _Last1, _FwdIt2 _First2, _FwdIt2 _Last2)
老邓 2010-09-07
  • 打赏
  • 举报
回复
11

Process returned 0 (0x0) execution time : 0.000 s
Press any key to continue.

KMP算法,支持ANSI/UNICODE两用代码。
老邓 2010-09-07
  • 打赏
  • 举报
回复
#include <iostream>
#include <tchar.h>
#include <windows.h>

using namespace std;

void KMP_GetNextVal(const TCHAR* pattern, int next[])
{
int j = 0, k = -1;
next[0] = -1;
while (pattern[j] != _T('\0'))
{
if (k == -1 || pattern[j] == pattern[k])
{
++j;
++k;
if (pattern[j] != pattern[k])
next[j] = k;
else
next[j] = next[k];
}
else
k = next[k];
}
}

int KMP_Find(const TCHAR* text, const TCHAR* pattern, const int patternLen)
{
if (!text || !pattern || pattern[0] == _T('\0') || text[0] == _T('\0'))
return -1;

int next[patternLen];
KMP_GetNextVal(pattern, next);

int index = 0, i = 0, j = 0;
while (text[i] != _T('\0') && pattern[j] != _T('\0'))
{
if (text[i] == pattern[j])
{
++i;
++j;
}
else
{
index += j - next[j];
if (next[j] != -1)
j = next[j];
else
{
j = 0;
++i;
}
}
}

if (pattern[j] == _T('\0'))
return index;
else
return -1;
}

int main()
{
const TCHAR* s1 = _T("jhefiektju2fwjq3n3the");
const TCHAR* s2 = _T("fwjq3");
cout << KMP_Find(s1, s2, lstrlen(s1)) << endl;
return 0;
}
gyw338 2010-09-07
  • 打赏
  • 举报
回复
用vb中的小程序就可以实现,挺简单的,找一本vb书,上面有例子
Good luck!
ForestDB 2010-09-06
  • 打赏
  • 举报
回复
最一般的算法就够用,不够KMP。
npuhuxl 2010-09-06
  • 打赏
  • 举报
回复
字符串匹配有很多算法的,来csdn提问之前应该先google一下
AlwaysSLH 2010-09-06
  • 打赏
  • 举报
回复
搜下KMP算法实现,很多
lovestefanie 2010-09-06
  • 打赏
  • 举报
回复
string类自己有find函数吧

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧