C语言字符串增删改

C语言字符串增删改

#include<stdio.h>
#include<stdlib.h>
struct CString{
    char *p;
    int len;
};
typedef  struct CString cString;
void  initWithString(cString *cstr,char *p);
int  mystrlen(const char *p);
char *mystrcpy(char *dst,const char *src);
char *mystrstr(const char *str,const char *findstr);
char *addString(cString *cstr,char *str,char *pos);
char *mystrcat(cString *cstr,const char *addStr);
int delString(cString *cstr,char *p);
int main(){
    cString ccString;
    initWithString(&ccString, "rumenz");
    char *pos=mystrstr(ccString.p, "en");
    addString(&ccString,"434343",pos);
    printf("%s\n",ccString.p);
    mystrcat(&ccString,"vvv");
    printf("%s\n",ccString.p);
    delString(&ccString,"en");
    printf("%s\n",ccString.p);
    return 0;
}
int delString(cString *cstr,char *delStr){
    if(cstr==NULL||delStr==NULL){
        return NULL;
    }
    
    int delLen=mystrlen(delStr);
    char *pos=mystrstr(cstr->p, delStr);
    if(pos==NULL){
        return NULL;
    }
    char *pnext=pos+delLen;
    while(*pnext!='\0'){
        *pos=*pnext;
        pnext++;
        pos++;
    }
    *pos='\0';
    return 1;
}
char *mystrcat(cString *cstr,const char *addStr){
    if(cstr==NULL||addStr==NULL){
        return NULL;
    }
    int addLen=mystrlen(addStr);
    int rLen=mystrlen(cstr->p);
    if(addStr+rLen+1>=cstr->len){
        cstr->p=(char *)realloc(cstr->p,addLen+rLen+1);
        for(int i=0;i<addLen;i++){
            cstr->p[rLen+i]=addStr[i];
        }
        cstr->p[rLen+addLen]='\0';
        cstr->len=addLen+rLen+1;
    }else{
        for(int i=0;i<addLen;i++){
            cstr->p[rLen+i]=addStr[i];
        }
    
    }
    return cstr->p;
}
char *addString(cString *cstr,char *str,char *pos){
    if(cstr==NULL||str==NULL||pos==NULL){
        return NULL;
    }
    int rLen=mystrlen(cstr->p);
    int strLen=mystrlen(str);
    int posLen=mystrlen(pos);
    if(rLen+strLen+1>=cstr->len){
        cstr->p=(char *)realloc(cstr->p,rLen+strLen+1);
        
        for(int i=rLen;i>=rLen-posLen;i--){
            cstr->p[i+strLen]=cstr->p[i];
        }
        cstr->p[rLen+strLen]='\0';
        for(int i=0;i<strLen;i++){
            cstr->p[rLen-posLen+i]=str[i];
        }
        cstr->len=rLen+strLen+1;
    }else{
        for(int i=rLen;i>=rLen-posLen;i--){
            cstr->p[i+strLen]=cstr->p[i];
        }
        cstr->p[rLen+strLen]='\0';
        for(int i=0;i<strLen;i++){
            cstr->p[rLen-posLen+i]=str[i];
        }
    }
    return cstr->p;
}
char *mystrstr(const char *str,const char *findstr){
    if(str==NULL||findstr==NULL){
        return NULL;
    }
    const char *tmp_src=str;
    const char *tmp_findstr=findstr;
    while(*tmp_src!='\0'){
        str=tmp_src;
        findstr=tmp_findstr;
        while((*findstr==*str)!='\0'){
            findstr++;
            str++;
        }
        if(*findstr=='\0'){
            return (char *)tmp_src;
        }
        tmp_src++;
    }
    return NULL;
}
void  initWithString(cString *cstr,char *p){
    int len=mystrlen(p);
    cstr->p=(char *)malloc(len+1);
    cstr->len=len+1;
    mystrcpy(cstr->p,p);
}
char *mystrcpy(char *dst,const char *src){
    if(src==NULL||dst==NULL){
        return NULL;
    }
    
    char *res=dst;
    while(*src!='\0'){
        *dst=*src;
        dst++;
        src++;
    }
    return res;
    
}
int mystrlen(const char *p){
    if(*p=='\0'){
        return 0;
    }else{
        
        return 1+mystrlen(p+1);
    
    }
}
返回笔记列表
入门小站