串(string)是由零个或多个字符组成的有限序列,又名叫字符串。

一些简单的概念:

空格串,是包含空格的串。它与空串的区别就是空格串是有内容有长度的,而且可以不止一个空格。

子串与主串,串中任意个数的连续字符组成的子序列称为该串的子串,包含子串的串称为主串。

子串在主串中的位置就是子串的第一个字符在主串中的序号。

//Index的实现算法
//T为非空串,若主串S中第pos个字符之后存在与T相等的子串,则返回第一个这样的子串在S中的位置,否则返回0.
int Index(String S,String T,int pos)
{
int n,m,i;
String sub;
if(pos>0)
{
n=StrLength(S);//得到主串S的长度
m=StrLength(T);//得到子串T的长度
i=pos;
while(i<=n-m+1)
{
SubString(sub,S,i,m);//取主串第i个位置,长度与T相等子串给sub
if(StrCompare(sub,T)!=0)//如果两串不相等
++i;
else
return i;//如果两串相等,则返回i值
}
}
return 0;//若无子串与T相等,返回0
}

串有顺序存储结构与链式存储结构,顺序存储结构是用一组地址连续的存储单元来存储串中的字符序列。按照预定义的大小 ,为每个定义的串变量分配一个固定长度的存储区。

//用基本数据来实现上面的算法 
//返回子串T在主串S中第pos个字符之后的位置,若不存在,则函数返回值为0
//T非空,1<=pos<=StrLength(S)
//主串S和要匹配的子串T的长度存在S[0]与T[0]中
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])
{
if(S[i]==T[j])//两字母相等则继续
{
++i;
++j;
}
else //指针后退重新开始匹配
{
i=i-j+2;//i退回到上次匹配首位的下一位
j=1;
}
}
if(j>T[0])
return i-T[0];
else
return 0;
}




原文地址:https://www.cnblogs.com/hxxy2003/p/2224918.html