一、串的定义
串是由零个和多个字符组成的有限序列,又名叫字符串。一般记为 s="a1a2a3.......an"(n>=0),其中s是串的名字,用双引号括起来的字符序列是串的值。串中的字符长度n称为串的长度。零个字符的串称为空串。
还有一些概念需要解释
子串与主串:串中任意个数的连续字符组成的子序列称为该串的子串,相应地,包含子串的串称为主串。子串在主串中的位置就是字串的第一个字符在主串中的序号。
二、串的比较
比如说,s=“happ” ,t=“happy”;s与t的前四位字符是一样的,而t第五为有字符,故t>s。再比如说s=“happy”,t=“happc”;由于第五位y的ASCII值大于c的ASCII值,所以s>t;总的来说,当两串的长度相同,且对应位置上的字符ASCII值相同,那么这两串才相等。怎么判断两串的大小呢,判断两串第一处不相等的元素的ASCII值,谁的ASCII值大,那个串就大。
三、朴素的模式匹配算法
又称为“暴力匹配算法”。比如说我们需要在一篇文章例找一个单词的定位。这种子串的定位操作通常称做串的模式匹配。
假如我们需要从下面的主串S=“goodgoogle”中,找到T=“google”这个子串的位置。我们通常需要下面的步骤。
1、从主串s第一位开始,s与t的前三位“goo”匹配成功,但s的第四位是‘d’,t的第四位是‘g’,所以第一位匹配失败
2、接下里从主串s的第二位开始,主串s首字母是‘o‘,而子串t的首字母是’g‘,所以匹配失败。
3、接下来从主串的第三位开始,主串首字母是’o‘,而子串的首字母是’g‘,所以匹配失败。
4、接下来从主串的第四位开始,主串首字母是’d‘,而子串的首字母是’g‘,所以匹配失败。
5、接下来从主串的第五位开始,主串首字母是’g‘,而子串的首字母是’g‘,相同,且子串的6个字母完全匹配成功,所以就能找到子串t在主串s中的位置下标为4。
代码如下:
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int Index(char* s,char* t,int lens,int lent,int* beginpos)
{
int i = *beginpos;
int j = 0;
while (i <= lens - 1&&j<=lent