字符串

由于测试零散截图就略掉

“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);
  
  
  
  
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值