首页 > 代码库 > 匹配主串与子串的过程
匹配主串与子串的过程
我们思考下算法,然后设计函数。假设主串 s1=nowamagic.net,子串sub=magic。我们要寻找sub在s1中的首个出现位置。
- 设i用于主串s1中当前位置下标值,j用于子串sub中当前位置下标值。伯爵娱乐城
- 首先我们比较s1[1]与sub[1],如果相同的话,可能子串就开始了。
- 如果不相等,那么子串仍然是从sub[1]开始,而主串s1则以s1[2]与其比较。
- 如果连续出现5次或以上匹配,那么就找到子串了,此时的j必然大于子串长度sub[0]。
/* 返回子串T在主串S中第pos个字符之后的位置。若不存在,则函数返回值为0。 *//* 其中,T非空,1≤pos≤StrLength(S)。 */int Index(String S, String T, int pos){ int i = pos; /* i用于主串S中当前位置下标值,若pos不为1,则从pos位置开始匹配 */ int j = 1; /* j用于子串T中当前位置下标值 */ while (i <= S[0] && j <= T[0]) /* 若i小于S的长度并且j小于T的长度时,循环继续 */ { if (S[i] == T[j]) /* 两字母相等则继续 */ { ++i; ++j; } else /* 指针后退重新开始匹配 */ { i = i-j+2; /* i退回到上次匹配首位的下一位 */ j = 1; /* j退回到子串T的首位 */ } } if (j > T[0]) return i-T[0]; else return 0;}
测试执行代码为:
case 6: printf("主串s1为: "); StrPrint(s1); k=StrAssign(sub,"magic"); printf("子串sub为: "); StrPrint(sub); i=Index(s1,sub,1); printf("s1的第%d个字母起和sub第一次匹配\n",i); break;
程序运行结果:
1.StrAssign 生成串2.StrLength 求串长3.StrCompare 串比较4.Concat 串连接5.SubString 求子串6.Index 求子串位置0.退出请选择你的操作:1串s1为:nowamagic.net6主串s1为: nowamagic.net子串sub为: magics1的第5个字母起和sub第一次匹配
完整的程序在后面部分会给出,就不必每篇都贴了。
匹配主串与子串的过程
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。