顺序串基本操作
定长顺序串类型定义
typedef struct{
char ch[MAXLEN];
int len;
}SString;
顺序串的初始化
void InitString(SString *s)
{
gets_s(s->ch);
s->len = strlen(s->ch);
}
顺序串插入操作
int StrInsert(SString *s,int pos,SString t)
{
int i;
if(pos < 0||pos > s->len) return 0;
if(s->len + t.len <= MAXLEN)
{
for(i = s->len + t.len - 1;i >= t.len + pos;i--)
s->ch[i] = s->ch[i-t.len];
for(i = 0;i < t.len;i++)
s->ch[i+pos] = t.ch[i];
s->len = s->len + t.len;
}
else if(pos + t.len <= MAXLEN){
for(i = MAXLEN-1;i > t.len + pos -1;i--)
s->ch[i] = s->ch[i-t.len];
for(i = 0;i < t.len;i++)
s->ch[i+pos] = t.ch[i];
s->len = MAXLEN;
}
else{
for(i = 0;i < MAXLEN - pos;i++)
s->ch[i+pos] = t.ch[i];
s->len = MAXLEN;
}
return 1;
}
顺序串删除操作
int StrDelete(SString *s,int pos,int len)
{
int i;
if(pos < 0||pos > (s->len - len)) return 0;
for(i = pos + len;i < s->len;i++)
s->ch[i-len] = s->ch[i];
s->len = s->len - len;
return 1;
}
顺序串比较操作
int StrCompare(SString s,SString t)
{
int i;
for(i = 0;i < s.len&&i < t.len;i++)
if(s.ch[i] != t.ch[i]) return(s.ch[i]-t.ch[i]);
return(s.len-t.len);
}
顺序串子串定位(BF算法)
int StrIndex(SString s,int pos,SString t)
{
int i,j,start;
if(t.len == 0) return 0;
start = pos;
i = start;
j = 0;
while(i < s.len&&j < t.len)
{
if(s.ch[i] == t.ch[j]){
i++;
j++;
}
else{
start++;
i = start;
j = 0;
}
}
if(j >= t.len) return start;
else return -1;
}
顺序串输出操作
void PrintString(SString s)
{
for(int i = 0;i < s.len;i++)
printf("%c",s.ch[i]);
}
Main函数测试
int main()
{
int pos;
SString s1,s2;
InitString(&s1);
InitString(&s2);
if(StrCompare(s1,s2)) printf("s1>s2");
else if(StrCompare(s1,s2)==0) printf("s1=s2");
else printf("s1<s2");
scanf_s("%d",&pos);
if(StrInsert(&s1,pos,s2)){
printf("插入成功:");
PrintString(s1);
}else printf("插入失败");
int len;
scanf_s("%d%d",&pos,&len);
if(StrDelete(&s1,pos,len))
{
printf("删除成功:");
PrintString(s1);
}else printf("删除失败");
scanf_s("%d",&pos);
if(StrIndex(s1,pos,s2))
printf("找到字串,且字串第一个字母第一次出现的位置序号为%d\n",StrIndex(s1,pos,s2));
else printf("无法找到该字串\n");
return 0;
}