一、解析
串(或字符串)是由零个或多个字符组成的有限序列。一般在S[0]的位置上放置的是该字符串的字符长度。其实就是字符串了,这个串的数据结构一般的在各种语言中都有实现的。参考书上第四章,其中有个很重要的kmp模式匹配很值的去看,然而我不会,因此略过。
二、存储结构
typedef unsigned char SString[MAXSTRLEN + 1];
三、操作
#define MAXSTRLEN 255
typedef unsigned char SString[MAXSTRLEN + 1];
//定长顺序存储
Status Concat(SString &T,SString S1,SString S2){
//用T返回由S1和S2联接而成的新串。若未截断,则返回True,否则false
if (S1[0] +S2[0]<=MAXSTRLEN)
{
//不需要截断
}
else if (S1[0] <MAXSTRLEN)
{
//截断
}
return true;
}
void PrintfSString(SString s){
for (int i = 1; i <= s[0]; i++)
{
printf("%c", s[i]);
}
}
void CreateString(SString &S,char * str){
int count = 0,j = 1;
while (str[count] != '\0')
{
S[j] = str[count];
count++;
j++;
}
S[0] = count;
printf("%d\n", count);
}
int Index(SString S,SString T ,int pos){
//返回子串T在主串S中的第pos个字符之后的位置。若不存在,函数值为0.
//其中,T非空 、pos[1,StrLength(S)]
int i = pos;//子串中的位置
int j = 1;//主串中的位置
while (j <= T[0] && i <=S[0])
{
if (S[i] == T[j])
{
//匹配成功
i++; j++;
}
else
{
//匹配失败 j复位
i = i - j + 2;
j = 1;
}
}
if ( j>T[0])
{
return i - T[0];
}
else
{
return 0;
}
}
四、执行
SString s1;
CreateString(s1,"asdfghjkl");
PrintfSString(s1);
SString s2;
CreateString(s2, "fgh");
PrintfSString(s2);
int pos = Index(s1,s2,1);
printf("返回的位置:%d\n",pos);
输出:9
asdfghjkl3
fgh返回的位置:4
请按任意键继续. . .