(1)编程实现在串s中下标为pos的字符之前插入串t。串的存储结构采用定长顺序存储,表示如下:
#define MAXLEN 40
typedef struct {
char ch[MAXLEN];
int len;
}SString;
串的生成和输入代码可参考如下:
void createstring(SString *s)
{
int i,j;
char c;
printf("请输入要建立的串的长度:");
scanf("%d",&j);
for(i=0; i<j; i++)
{
printf("请输入串的第%d个字符:",i+1);
fflush(stdin);
scanf("%c",&c);
s->ch[i] = c;
}
s->len = j;
}
void output(SString *s)
{
int i;
for (i=0;i<s->len;i++)
printf("%c ",s->ch[i]);
printf("\n");
}
主函数代码如下:
void main()
{
SString *str1;
SString str2;
int i,j,k,pos;
int flag=0;
str1 = (SString *)malloc(sizeof(SString));
str1->len = 0;
printf("建立字符串1:\n");
createstring(str1);
printf("建立字符串2:\n");
createstring(&str2);
printf("请输入要插入的位置:");
scanf("%d",&pos);
flag=StrInsert(str1,pos,str2);
if(flag == 0)
printf("插入操作失败!");
else
{
printf("插入后串为:\n");
output(str1);
}
}
请完成函数int StrInsert(SString *s, int pos, SString t)的代码,若插入成功,函数值返回1, 则返回0。
2)编写模式匹配算法。
基本思想
设有两个字符串s和t,首先将s1与t1进行比较,直到s的某一个字符si和ti相同,再将它们之后的字符进行比较,若也相同,则如此继续往下比较,当s的某一个字符si与t的字符tj不同时,则s返回到本趟开始字符的下一个字符,即si-j+2,t返回到t1,继续开始下一趟的比较,重复上述过程。若t中的字符全部比较完,则说明本趟匹配成功,本趟的起始位置是i-j+1,否则,匹配失败。
具体算法
顺序定长存储字符串类型
struct seqstr
{char string[max] ;
int len : } ;
int index ( struct seqstr *s ,struct seqstr * t )
{
int I , j ;
i=0 ;
j=0 ;
while ( i<s->len&&j<t->len )
if ( s->string[i] == t->string[j])
{ i++ ;
j++ ; }
else
{ i=i-j+1 ;
j=1; }
if ( j>=t->len )
return( j-t->len) ;
else
return( -1) ;
}