#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define TRUE 1
#define FALSE 0
#define MAXSIZE 100
typedef int Status;
typedef struct
{
char *Str;
int Length;
int Size;
}String;
Status StrInit(String *str)
{
str->Length = 0;
str->Size = MAXSIZE;
str->Str = (char *)malloc(MAXSIZE*sizeof(char));
}
//substring
Status SubString(String *Sub,String *S,int pos,int len)
{
if(pos <1||pos>S->Length||len<0||pos+len>S->Length+1)
return FALSE;
if(Sub->Size<len)
{
Sub->Str = (char *)realloc(Sub->Str,len+Sub->Length);
if(!Sub->Str)
{
exit(0);
}
}
int i;
for(i=0;i<len;i++)
Sub->Str[i] = S->Str[pos+i-1];
Sub->Length = len;
return TRUE;
}
int Index(String *S, String *T, int pos)
{
if(pos>0)
{
String sub;
StrInit(&sub);
int len_s = strlen(S->Str);
int len_t = strlen(T->Str);
int i = pos-1;
while(i<=len_s-len_t)
{
SubString(&sub,S,i,len_t);
if(strcmp(sub.Str,T->Str) != 0)
i++;
else
return i;
}
}
return FALSE;
}
Status StrInsert(String *S,int pos,String *T)
{
if(pos<1||pos>S->Length)
return FALSE;
if(S->Size<S->Length+T->Length)
{
S->Str = (char *)realloc(S->Str,S->Length+T->Length);
if(!S->Str)
exit(0);
}
int i = pos-1;
for(;i<S->Length;i++)
S->Str[i+T->Length] = S->Str[i];
int j = 0;
for(i = pos-1;i<pos+T->Length;i++,j++)
S->Str[i] = S->Str[j];
return TRUE;
}
Status StrDelete(String *S,int pos,int len)
{
if(pos<1||pos>S->Length||len<0||pos+len>S->Length+1)
return FALSE;
int i = pos-1+len;
for(;i<S->Length;i++)
S->Str[i-len] = S->Str[i];
S->Length-=len;
return TRUE;
}
Status Replace(String *S,String *T,String *V)
{
int i = 0;
if(!T->Length)
return FALSE;
do
{
i = Index(S,T,i);
if(i)
{
StrDelete(S,i,T->Length);
StrInsert(S,i,V);
i+=V->Length;
}
}while(i);
return TRUE;
}
int main()
{
return 0;
#include <stdlib.h>
#include <string.h>
#define TRUE 1
#define FALSE 0
#define MAXSIZE 100
typedef int Status;
typedef struct
{
char *Str;
int Length;
int Size;
}String;
Status StrInit(String *str)
{
str->Length = 0;
str->Size = MAXSIZE;
str->Str = (char *)malloc(MAXSIZE*sizeof(char));
}
//substring
Status SubString(String *Sub,String *S,int pos,int len)
{
if(pos <1||pos>S->Length||len<0||pos+len>S->Length+1)
return FALSE;
if(Sub->Size<len)
{
Sub->Str = (char *)realloc(Sub->Str,len+Sub->Length);
if(!Sub->Str)
{
exit(0);
}
}
int i;
for(i=0;i<len;i++)
Sub->Str[i] = S->Str[pos+i-1];
Sub->Length = len;
return TRUE;
}
int Index(String *S, String *T, int pos)
{
if(pos>0)
{
String sub;
StrInit(&sub);
int len_s = strlen(S->Str);
int len_t = strlen(T->Str);
int i = pos-1;
while(i<=len_s-len_t)
{
SubString(&sub,S,i,len_t);
if(strcmp(sub.Str,T->Str) != 0)
i++;
else
return i;
}
}
return FALSE;
}
Status StrInsert(String *S,int pos,String *T)
{
if(pos<1||pos>S->Length)
return FALSE;
if(S->Size<S->Length+T->Length)
{
S->Str = (char *)realloc(S->Str,S->Length+T->Length);
if(!S->Str)
exit(0);
}
int i = pos-1;
for(;i<S->Length;i++)
S->Str[i+T->Length] = S->Str[i];
int j = 0;
for(i = pos-1;i<pos+T->Length;i++,j++)
S->Str[i] = S->Str[j];
return TRUE;
}
Status StrDelete(String *S,int pos,int len)
{
if(pos<1||pos>S->Length||len<0||pos+len>S->Length+1)
return FALSE;
int i = pos-1+len;
for(;i<S->Length;i++)
S->Str[i-len] = S->Str[i];
S->Length-=len;
return TRUE;
}
Status Replace(String *S,String *T,String *V)
{
int i = 0;
if(!T->Length)
return FALSE;
do
{
i = Index(S,T,i);
if(i)
{
StrDelete(S,i,T->Length);
StrInsert(S,i,V);
i+=V->Length;
}
}while(i);
return TRUE;
}
int main()
{
return 0;
}
最近复习数据结构的时候写的,有什么疑问欢迎骚扰