由于测试零散截图就略掉
“a.h”
#include
#include
#define FALSE 0
#define OK 1
#define ERROR 0
#define TRUE 1
#define MAXLEN 40
typedef int Status;
typedef int Status ;
typedef char SString[MAXLEN+1];
“b.h”
Status StrAssign(SString T,char *chars)
{
int i;
if(strlen(chars)>MAXLEN)
return FALSE;
T[0]=strlen(chars);
for(i=1;i<=T[0];i++)
T[i]=*(chars+i-1);
return OK;
}
Status StrCopy(SString T,SString S)
{
int i;
for(i=0;i<=S[0];i++)
T[i]=S[i];
return OK;
}
Status StrEmpty(SString S)
{
if(S[0]==0)
return TRUE;
else
return FALSE;
}
int StrLength(SString S)
{
return S[0];
}
Status StrClean(SString S)
{
S[0]=0;
return OK;
}
Status Concat(SString T,SString S1,SString S2) //用T返回s1和s2的链接
{
int i;
if(S1[0]+S2[0]<=MAXLEN){
T[0]=S1[0]+S2[0];
for(i=1;i<=S1[0];i++)
T[i]=S1[i];
for(i=1;i<=S2[0];i++)
T[i+S1[0]]=S2[i];
return TRUE;
}
else{
T[0]=MAXLEN;
for(i=1;i<=S1[0];i++)
T[i]=S1[i];
for(i=1;i<=MAXLEN-S1[0];i++)
T[i+S1[0]]=S2[i];
return FALSE;
}
}
Status SubString(SString Sub,SString S,int pos,int len) // 用Sub返回S的从第pos个的len串
{
int i;
if(pos+len-1>S[0]||pos<1||len<0)
return ERROR;
Sub[0]=len;
for(i=1;i<=len;i++)
Sub[i]=S[pos+i-1];
return OK;
}
int Index(SString S,SString T,int pos) //S存在和T相同的子串,返回他在S的第pos个后第一次出现的位置
{
int i,j;
if(pos>=1&&pos<=S[0]){
i=pos;
j=1;
while(i<=S[0]&&j<=T[0]){
if(S[i]==T[j]){
i++;j++;
}
else{
j=1;i=i-j+2; //S的下一个字符
}
}
if(j>T[0])
return i-T[0];
else
return 0;
}
return 0;
}
Status StrInsert(SString S,int pos,SString T) //S中插入T
{
int i;
if(pos<1||pos>S[0]+1)
return ERROR;
if(S[0]+T[0]<=MAXLEN){
for(i=S[0];i>=pos;i--) //字符先整体后移空出位置
S[T[0]+i]=S[i];
for(i=1;i<=T[0];i++)
S[pos+i-1]=T[i];
S[0]+=T[0];
return TRUE;
}
else{
for(i=1;i<=MAXLEN-S[0];i++) //字符先整体后移空出位置
S[MAXLEN-i+1]=S[S[0]-1];
for(i=1;i<=MAXLEN-S[0];i++)
S[pos+i-1]=T[i];
S[0]=MAXLEN;
return FALSE;
}
}
Status StrDelete(SString S,int pos,int len)
{
int i;
if(pos<1||len<1||pos+len-1>S[0])
return ERROR;
for(i=pos+len;i<=S[0];i++)
S[i-len]=S[i];
S[0]-=len;
return OK;
}
Status Replace(SString S,SString T,SString V) //用V替换S中与T相同的串
{
int i=1;
if(StrEmpty(T))
return ERROR;
do{
i=Index(S,T,i);
printf("===%d\n",i);
if(i){
StrDelete(S,i,T[0]);
StrInsert(S,i,V);
i+=T[0];
}
}while(i);
return OK;
}
Status StrPrint(SString S)
{
int i;
printf("串开始输出: ");
for(i=1;i<=S[0];i++)
printf(" %c ",S[i]);
printf("\n");
return OK;
}
“main.c”
#include"a.h"
#include"b.h"
void main()
{
SString SS;
SString TT;
SString S;
char *s="lijiannihaolijian";
char *t="jian";
char *l="daoo";
StrAssign(S,l);
StrAssign(SS,s);
StrAssign(TT,t);
}