顺序串的基本操作

#include<stdio.h>
#include<stdlib.h>
typedef struct node
{char a[40];
int b;
 }node;//顺序串
node fuzhi(node s,char c[])
{int i=0;
while(i<40&&c[i]!='\0')
{s.a[i]=c[i];
i++;}
s.b=i;
return s;}//fuzhi 
node jiaru(node s,int pos,node p)
{int i;
if(pos<0||pos>s.b)
{printf("插入位置不合适\n");
exit(1);
}
if(s.b+p.b<=40)
{i=s.b+p.b-1;
for(;i>=pos-1+p.b;i--)
s.a[i]=s.a[i-p.b];
for(i=0;i<p.b;i++)
s.a[i+pos-1]=p.a[i];
s.b+=p.b;
}
else if(pos+p.b<=40)
    {for(i=39;i>=pos-1+p.b;i--)
    s.a[i]=s.a[i-p.b];
    for(i=0;i<p.b;i++)
     s.a[i+pos-1]=p.a[i]; 
     s.b=40;
    }
    else
    {for(i=pos-1;i<40;i++)
    s.a[i]=p.a[i-pos+1];
	s.b=40;  
	}
	return s;
}//串的插入;
node shanchu(node s,int pos,int changdu)
{int i;
if(pos<0||pos>s.b-1)
{printf("输出位置错误");
exit(1); 
}
for(i=pos-1;i<s.b-changdu;i++)
s.a[i]=s.a[i+changdu];
s.b-=changdu;
return s;
 } //串的删除
int pipei(node s,int pos,node p)
{int i=pos-1,j=0,weizhi=i;
if(pos<=0||pos>s.b)
{printf("匹配位置错误");
exit(1); 
}
while(i<s.b&&j<p.b)
{if(s.a[i]==p.a[j])
{i++;
j++;
}
else
{weizhi++;
i=weizhi;
j=0;
}
}
if(j==p.b)
return weizhi;
else
{printf("配对失败");
exit(1);}
 } //串的匹配
int main()
{char c[40];
int pos,weizhi;
node s,p;
scanf("%s",c);
s=fuzhi(s,c);
p=fuzhi(p,c);
printf("请输入s串与子串p配对胡开始位置\n");
scanf("%d",&pos);
weizhi=pipei(s,pos,p);
printf("位置时%d",weizhi);
 } 
在这里插入代码片

猜你喜欢

转载自blog.csdn.net/feiqipengcheng/article/details/83213251
今日推荐