实现字符串操作常用的库函数的功能

12 篇文章 0 订阅
2 篇文章 0 订阅

实现字符串操作常用的库函数的功能

strlen        strcpy        strncpy1        strcat        strncat        strchr        trrchr

/*task1.c*/
#include "_public.h"

int main(){
    char str[50];
    memset(str,0,sizeof(str));
    char str1[50];
    memset(str1,0,sizeof(str1));
    strcpy1(str,"asdadsfbgedwasfghfds");// 实现strcpy函数的功能
    printf("strlen1(str):%lu\n",strlen1(str));// 实现strlen函数的功能
    // strcpy(str,"asdadsfbgedwasfghfds");
    printf("strlen(str):%lu\n",strlen(str));
    // 实现strncpy函数的功能,下同。
    strncpy1(str,"123456fbgedwasfghfds",6);// 实现strncpy函数的功能
    printf("str复制前6个字符:%s\n",str);// 实现strlen函数的功能
    strncpy1(str,"123456fbgedwasfghfds",40);// 实现strncpy函数的功能
    printf("str复制前6个字符:%s\n",str);// 实现strlen函数的功能
    
    // 实现strcat函数的功能
    strcpy1(str,"asdfsgdsdf");
    strcpy1(str1,"1234");
    printf("在“asdfsgdsdf后接上”1234“:%s\n",strcat1(str, str1));
    strcpy1(str,"asdfsgdsdf");
    printf("在“asdfsgdsdf后接上”1234“:%s\n",strcat(str, str1));
    // 实现strncat函数的功能
    strcpy1(str,"asdfsgdsdf");
    strcpy1(str1,"12345");
    printf("strncat1在“asdfsgdsdf后接上”12345“前3个:%s\n",strncat1(str, str1,3));
    strcpy1(str,"asdfsgdsdf");
    printf("strncat在“asdfsgdsdf后接上”12345“前3个:%s\n",strncat1(str, str1,3));
    strcpy1(str,"asdfsgdsdf");
    printf("strncat1在“asdfsgdsdf后接上”12345“前8个:%s\n",strncat1(str, str1,8));
    strcpy1(str,"asdfsgdsdf");
    printf("strncat在“asdfsgdsdf后接上”12345“前8个:%s\n",strncat1(str, str1,8));

    // 实现strchr函数的功能
    printf("strchar1返回“%s”中第一次出现‘d’的地址:%p\n",str,strchr1(str, 'd'));
    printf("strchar返回“%s”中第一次出现‘d’的地址:%p\n",str,strchr(str, 'd'));
    // 实现strncpy函数的功能
    char *strrchr1(const char *s, const int c);
    printf("strchar1返回“%s”中最后一次出现‘d’的地址:%p\n",str,strrchr1(str, 'd'));
    printf("strchar返回“%s”中最后一次出现‘d’的地址:%p\n",str,strrchr(str, 'd'));

    /*************难度up***************/
    printf("strstr返回“%s”中第一次出 现‘dfs’的地址:%p\n",str,strstr(str, "dfs"));
    printf("strstr1返回“%s”中第一次出现‘dfs’的地址:%p\n",str,strstr1(str, "dfs"));
    printf("strstr2返回“%s”中第一次出 现‘dfs’的地址:%p\n",str,strstr2(str, "dfs"));

    printf("strstr返回“%s”中第一次出现‘daa’的地址:%p\n",str,strstr(str, "daa"));
    printf("strstr1返回“%s”中第一次出 现‘daa’的地址:%p\n",str,strstr1(str, "daa"));
    printf("strstr2返回“%s”中第一次出现‘daa’的地址:%p\n",str,strstr2(str, "daa"));

    printf("strcmp1比较“%s”与“%s”,返回值为:%d\n",str,str1,strcmp1(str, str1));
    printf("strcmp比较“%s”与“%s”,返回值为:%d\n",str,str1,strcmp(str, str1));

    printf("strcmp1比较“%s”与“%s”,返回值为:%d\n",str,str,strcmp1(str, str));
    printf("strcmp比较“%s”与“%s”,返回值为:%d\n",str,str,strcmp(str, str));

    printf("strncmp1比较“%s”与“%s”,返回值为:%d\n",str,str1,strncmp1(str, str1,3));
    printf("strncmp比较“%s”与“%s”,返回值为:%d\n",str,str1,strncmp(str, str1,3));

    printf("strncmp1比较“%s”与“%s”,返回值为:%d\n",str,str,strncmp1(str, str,3));
    printf("strncmp比较“%s”与“%s”,返回值为:%d\n",str,str,strncmp(str, str,3));

}
/*public.c*/
#include "_public.h"

//min函数的实现
size_t min(const size_t x, const size_t y){
    if (x<y)    return x;
    return y;
    
}
 // 实现strlen函数的功能。
size_t strlen1( const char*  str){
    size_t longth=0;
    while (str[longth]) longth++;
    return longth;
}

// 实现strcpy函数的功能
char *strcpy1(char* dest, const char* src){
    int i=0;
    while (src[i])
    {
        dest[i]=src[i];
        i++;
    }
    dest[i]=0;
    return dest;
}

// 实现strncpy函数的功能,下同。
char *strncpy1(char* dest, const char* src,size_t n){
    int i=0;
    for(i=0;i<n;i++)    dest[i]=src[i];
    return dest;
}
// 实现strcpy函数的功能
char *strcat1(char* dest, const char* src){
    size_t longth=0 ,n = 0;
    longth = strlen1(dest);
    while (src[n])
    {
        dest[longth]=src[n];
        longth++;
        n++;
    }
    dest[longth]=0;
    return  dest;
}
// 实现strncat函数的功能
char *strncat1 (char* dest, const char* src,size_t n){
    size_t longth=0 ,i = 0;
    longth = strlen1(dest);
    for(i = 0;i<n;i++)
    {
        dest[longth]=src[i];
        longth++;
    }
    dest[longth]=0;
    return  dest;
}
 
// 实现strchr函数的功能
char *strchr1(const char *s, const int c){
    size_t longth=0;
    size_t i=0;
    longth = strlen1(s);
    for(i=0;i<longth-1;i++){
        if(s[i]==c) return (char *)s+i;
    }
    return 0;
}

// 实现strrchr函数的功能
char *strrchr1(const char *s, const int c){
    size_t longth=0;
    size_t i=0;
    longth = strlen1(s);
    for(i=longth-1;i>=0;i--){
        if(s[i]==c) return (char *)s+i; 
    }
    return 0;
}

/*************难度up***************/
// 实现strstr1函数的功能
char *strstr1(const char* str, const char* substr){
    size_t longth=0,longth1;
    size_t i=0,j=0,n=0;
    longth = strlen1(str);
    longth1 = strlen1(substr);
    for(i=0;i<longth;i++){
        if(str[i]==substr[0]){
            n=i;
            for(j=0;j<longth1;j++){
                //printf("%zu\n",n);
                if (str[n]==substr[j]){
                    n++;
                    continue;
                }
                break;
            }
            if(j == longth1)    return (char *)str+i;
        }
    }
    return 0;    
}  
char *strstr2(const char* str, const char* substr){
    char* pos=(char*)str;
    char* pos1=0;
    while (pos[0])
    {
        if(strchr(pos,substr[0])==0)   return 0;
        if(strncmp(pos,substr,strlen(substr))==0)   return (char*)pos;
        pos++;
    }
    
    return 0;    
}  
// 实现strcmp1函数的功能
int strcmp1( const char *str1, const char *str2 ){
    size_t longth1 = strlen(str1);
    size_t longth2 = strlen(str2);
    size_t n = min(longth1,longth2);
    int i=0;
    // for(i=0;i<n;i++){
    //     if (str1[i]>str2[i])  return 1;
    //     else if(str1[i] < str2[i])  return -1;
    // }
    // if (longth1==longth2)   return 0;
    // else if(longth1 > longth2)  return 1;
    // return -1;
    for(i=0;i<n;i++){
        if(str1[i]==str2[i])    continue;
        break;
    }
   // printf("i = %d \n",i);

    if ((longth1==longth2)&&(str1[i]==str2[i]))   return 0;
    if(str1[i]>str2[i]) return 1;
    return -1;
    


}
// 实现strncmp1函数的功能
int strncmp1(const char *str1, const char *str2, const size_t n){
    size_t longth1 = strlen(str1);
    size_t longth2 = strlen(str2);
    int i=0;
    for(i=0;i<n;i++){
        if (str1[i]>str2[i])  return 1;
        else if(str1[i]>str2[i])  return -1;
        //else    return 0;
    }
    return 0;
}

//task2.c的函数     第二个参数destsize是第一个参数dest占用内存的字节数
char *STRCPY(char* dest,const size_t destsize,const char* src){
    size_t n=0,i=0;
    for(i=0;(i<destsize-1)&&(src[i]!=0);i++)    dest[i]=src[i];
    dest[i]=0;
    return dest;
}
//****************
char *STRCPY2(char* dest,const size_t destsize,const char* src){
    size_t n=0,i=0;
    for(i=0;(i<destsize-1)&&(src[i]!=0);i++)    dest[i]=src[i];
    dest[i]=0;
    return dest;
}
char *STRNCPY(char* dest,const size_t destsize,const char* src,size_t n){
    size_t i=0;
    for(i=0;(i<destsize-1)&&(src[i]!=0)&&i<n;i++)   dest[i]=src[i];
    dest[i]=0;
    return dest;
}
char *STRCAT(char* dest,const size_t destsize,const char* src){
    size_t i=0,x=0;
    for(i=strlen(dest),x=0;(i<destsize-1)&&(src[x]!=0);i++,x++)   dest[i]=src[x];
    return dest;
}
char *STRNCAT(char* dest,const size_t destsize,const char* src,size_t n){
    size_t i=0,x=0;
    for(i=strlen(dest),x=0;(i<destsize-1)&&(src[x]!=0)&&x<n;i++,x++)   dest[i]=src[x];
    return dest;
}

/*********************************task3.c的函数定义***********************************/
// 删除字符串左边指定的字符
void DeleteLChar(char *str,const char in_char){
    size_t i=0;
    for(i=0;i<strlen(str);i++){
        if (str[i] == in_char)  break;        
    }
    //if(i==strnlen)  retur
    for(;i<strlen(str);i++)    str[i]=str[i+1];
}
// 删除字符串右边指定的字符
void DeleteRChar(char *str,const char in_char){
    size_t i=0;
    for(i=strlen(str)-1;i>0;i--){
        if (str[i] == in_char)  break;        
    }
    //if(i==strnlen)  retur
    for(;i<strlen(str);i++)    str[i]=str[i+1];
}
// 删除字符串两边指定的字符
void DeleteLRChar(char *str,const char in_char);
// 删除字符串中间的字符串
void DeleteMStr(char *str,const char *in_str);
// 在字符串的左边补字符到指定长度
void LPad(char *str,const char in_char,unsigned int in_len);
// 在字符串的右边补字符到指定长度
void RPad(char *str,const char in_char,unsigned int in_len);
// 把小写转换成大写,忽略不是字母的字符
void ToUpper(char *str){
    size_t n=0;
    n=strlen(str);
    for(int i=0;i<n;i++){
        if(str[i]<='z'&&str[i]>='a')    str[i]-=('a'-'A');
    }
}
// 把大写转换成小写,忽略不是字母的字符
void ToLower(char *str){
    size_t n=0;
    n=strlen(str);
    for(int i=0;i<n;i++){
        if(str[i]<='Z'&&str[i]>='A')    str[i]+=('a'-'A');
    }
}
// 判断内容是否全部是数字,0-是,-1-不是。
int  IsDigit(const char *str){
    size_t n=0;
    n=strlen(str);
    for(int i=0;i<n;i++){
        if(!(str[i]<='9'&&str[i]>='0'))    return -1;
    }
    return 0;
}
// 判断内容是否全部是大写字母,0-是,-1-不是。
int  IsUpper(const char *str){
    size_t n=0;
    n=strlen(str);
    for(int i=0;i<n;i++){
        if(!(str[i]<='Z'&&str[i]>='A'))    return -1;
    }
    return 0;
}
// 判断内容是否全部是小写字母,0-是,-1-不是。
int  IsLower(const char *str){
    size_t n=0;
    n=strlen(str);
    for(int i=0;i<n;i++){
        if(!(str[i]<='z'&&str[i]>='a'))    return -1;
    }
    return 0;
}
// 判断内容是否全部是ASCII字符,0-是,-1-不是。
int  IsASCII(const char *str){
    size_t n=0;
    n=strlen(str);
    for(int i=0;i<n;i++){
        if(!(str[i]<=127&&str[i]>=0))    return -1;
    }
    return 0;
}
/*public.h*/
#include<stdio.h>
#include<string.h>

//min函数的实现
size_t min(const size_t x, const size_t y);

size_t strlen1( const char*  str);          // 实现strlen函数的功能。
char *strcpy1(char* dest, const char* src);  // 实现strcpy函数的功能,下同。
char *strncpy1(char* dest, const char* src,size_t n);
char *strcat1(char* dest, const char* src);
char *strncat1 (char* dest, const char* src,size_t n);
char *strchr1(const char *s, const int c);
char *strrchr1(const char *s, const int c);


/*************难度up***************/
char *strstr1(const char* str, const char* substr);   // 实现strstr1函数的功能,下同。
char *strstr2(const char* str, const char* substr);   
int strcmp1( const char *str1, const char *str2 );
int strncmp1(const char *str1, const char *str2, const size_t n);

/*************task2.c的函数定义***************/
char *STRCPY(char* dest,const size_t destsize,const char* src);
char *STRNCPY(char* dest,const size_t destsize,const char* src,size_t n);
char *STRCAT(char* dest,const size_t destsize,const char* src);
char *STRNCAT(char* dest,const size_t destsize,const char* src,size_t n);

/*********************************task3.c的函数定义***********************************/
// 删除字符串左边指定的字符
void DeleteLChar(char *str,const char in_char);
// 删除字符串右边指定的字符
void DeleteRChar(char *str,const char in_char);
// 删除字符串两边指定的字符
void DeleteLRChar(char *str,const char in_char);
// 删除字符串中间的字符串
void DeleteMStr(char *str,const char *in_str);
// 在字符串的左边补字符到指定长度
void LPad(char *str,const char in_char,unsigned int in_len);
// 在字符串的右边补字符到指定长度
void RPad(char *str,const char in_char,unsigned int in_len);
// 把小写转换成大写,忽略不是字母的字符
void ToUpper(char *str);
// 把大写转换成小写,忽略不是字母的字符
void ToLower(char *str);
// 判断内容是否全部是数字,0-是,-1-不是。
int  IsDigit(const char *str);
// 判断内容是否全部是大写字母,0-是,-1-不是。
int  IsUpper(const char *str);
// 判断内容是否全部是小写字母,0-是,-1-不是。
int  IsLower(const char *str);
// 判断内容是否全部是ASCII字符,0-是,-1-不是。
int  IsASCII(const char *str);

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值