给出两种算法,感觉这样算效率很低。。
/*操作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);
m = StrLength(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;
}
}
return 0;
}
第二种
/*基本数组实现Index的算法*/
//T为非空串。若主串S中第pos个字符之后存在与T相等的子串,则返回第一个这样的子串,则返回第一个这样的子串在S中的位置,否则返回0
int Index(String S,String T,int pos)
{
int i = pos;
int j = 1;
while (i<=S[0] && j<= T[0])
{
if (S[i] == T[j]) //两字母相等则继续
{
++i;
++j;
}
else //重新开始匹配
{
i = i-j+2; //i退回上次匹配首位的下一位
j = 1;
}
}
if (k>T[O])
return i = T[0];
else
return 0;
}