/*******************************
* 姓名:董瑞
* 学号:2015015303
* 班级:4班
* 日期:2016/11/9
*******************************/
#include <stdio.h>//标准输入输出
#include<string.h>//字符串
#include<time.h>//时间库
#include<stdlib.h>//C语言标准库
#include<math.h>//函数库
#define OK 1
#define ERROR 0
#define OVERFLOW -2
typedef struct
{
char *ch;
int length;
}String;
void Init_String(String *T)
{
T->ch = NULL;
T->length = 0;
}
int StrAssign(String *T,char *chars)
{
int i;
int len;
char *p=chars;
if(T->ch)
free(T->ch);
for(len=0;*p!='\0';++p,++len);
if(!len)
{
T->ch=NULL;
T->length=0;
}
else
{
T->ch=(char*)malloc(sizeof(char)*len);
for(i=0;i<len;i++)
T->ch[i]=chars[i];
T->length=len;
}
return OK;
}
void STP(String * S,String T,String P)
{
int i=0,j=0;
int x,y;
for(i=0;i<S->length && j<T.length ;i++)
{
if(S->ch[i]==T.ch[i])
{
++i;
++j;
}
else
{
i=i-j+1;
j=0;
}
}
x=i-T.length;
y=i;
String * temp= S ;
free(S->ch);
S->ch=(char *)malloc((S->length+T.length-P.length)*sizeof(char));
for(i=0;i<x;i++)
{
S->ch[i]=temp->ch[i];
}
for(i=S->length-1;i>=y;--i)
{
S->ch[i+(P.length-T.length)]=S->ch[i];
}
for(i=x;i<x+P.length;i++)
{
S->ch[i]=P.ch[i];
}
}
int main()
{
char s[]="abcabbreadyeafd";
char t[]="ready";
char p[]="replaceok";
String T,S,P;
StrAssign(&S,s);
StrAssign(&T,t);
StrAssign(&P,p);
}