自己最近写的一些c语言的串的算法

#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;

}

最近复习数据结构的时候写的,有什么疑问欢迎骚扰

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值