字符串匹配错误

wuyan16001 2008-12-01 12:35:37
数据结构中字符串匹配算法,有些小问题(如 ?)


int index(char *S, char *T, int pos)
{
//返回子串T在母串S中第pos后的位置,如不存在则返回0
int i = pos; // 1<=pos<=length(S)
int j = 1;

while ( i <= S[0] && j <= T[0]) //这句话表示啥意思,这样循环不是很复杂吗?
{
if ( S[i] == T[j]) //字符相匹配,i,j前进
{
++i;
++j;
}
else //否则j指针后退重新匹配
{
i = i-j+2;
j = 1;
}
}
//匹配成功
if (j >= T[0]) //这又是????
return i-T[0];
else
return 0;

}


...全文
133 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
while ( i <= S[0] && j <= T[0]) //这句话表示啥意思,这样循环不是很复杂吗?
//算法要求各串的第一个元素为串的长度。
门后面的猫 2008-12-01
  • 打赏
  • 举报
回复
这个是BF模式匹配算法,具体的你可以到书上查查;
while ( i <= S[0] && j <= T[0])
//S[0],T[0],分别存储了字符串S,T 的长度,满足匹配的基本条件
if (j >= T[0]) //匹配成功时,j正好等于T的长度,否则为1
sagegz 2008-12-01
  • 打赏
  • 举报
回复

int index(char *S, char *T, int pos){//返回子串T在母串S中第pos后的位置,如不存在则返回0
int i = pos; // 1 <=pos <=length(S)
int j = 1; //需匹配的字符串T中的计数
while ( i <= S[0] && j <= T[0]){ //不复杂,当主串S中以及子串T没有全部遍历完时则继续进行循环S[0]的值存放的是主串S的长度,T[0]存放的也是子串T的长度
if ( S[i] == T[j]){ //字符相匹配,i,j前进
++i;
++j;
}
else{ //否则j指针后退重新匹配
i = i-j+2;
j = 1;
}
if (j >= T[0]) //当匹配成功
return i-T[0]; //返回查找到的位置
else
return 0; //若没有成功,则返回0
}
nullah 2008-12-01
  • 打赏
  • 举报
回复
UP
星羽 2008-12-01
  • 打赏
  • 举报
回复
如2楼所说
whsfer 2008-12-01
  • 打赏
  • 举报
回复
帮顶!!
liliflashfly 2008-12-01
  • 打赏
  • 举报
回复
楼上都是正解...

65,211

社区成员

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

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