day 7.12--作业(strlen、strcpy、strcmp、strcat、strstr)

1、自定义函数(my_strlen)实现strlen函数的功能

#include<stdio.h>
//求字符串的长度
int my_strlen(char *arr)
{
    if(*arr=='\0')   //如果出现\0,就返回0
    {
        return 0;
    }else
    {
        return 1+my_strlen(arr+1); //地址+1,往后走
    }
}

int main(int argc, char const *argv[])
{
    char str[100]={0};
    printf("输入一串字符串:");
    gets(str);      //输入
    int  len=my_strlen(str);
    printf("这个字符串的长度是:%d\n",len);
    return 0;
}

 

2、自定义函数(my_strcpy)实现strcpy函数的功能

//自定义函数函数(my_strcpy)实现strcpy函数的功能
#include<stdio.h>
void my_strcpy(char *one, const char *two)
{
    while(*two) //遍历*two
    {
        *one=*two;  //赋值
        *two++;     //指针后移
        *one++;
    }
    *one='\0';       //末尾加上\0
}

//主函数
int main(int argc, char const *argv[])
{
    char str[100]="";
    char sin[100]="";
    printf("要拷贝的字符串为:");
    gets(str);
    my_strcpy(sin,str);
    printf("拷贝出的字符串为:%s\n",sin);
    return 0;
}

 

3、白定义函数(my_strcmp)实现strcmp函数的功能

        strcmp功能:比较两个字符串的大小

#include<stdio.h>
int my_strcmp(char *abc,char*def)
{
    while(*abc&&*def)
    {
        if(*abc>*def)
        {
            return 1;
        }else if(*abc<*def)
        {
            return -1;
        }else
        {
            *abc++;
            *def++;
        }   //相等时,一直到其中一个到\0时循环结束
    }
    if(*abc) //如果此时*abc不等于\0,即为真
    {
        return 1;
    }
    else if(*def)    //如果此时*def不等于\0,即为真
    {
        return -1;
    }else    //如果此时*abc和*def都等于\0,即为真
    {
        return 0;
    }
}

//主函数
int main(int argc, char const *argv[])
{
    char str[100]={0};
    char sin[100]={0};
    printf("输入第一个字符串:");
    gets(str);
    printf("输入第二个字符串:");
    gets(sin);
    int n=my_strcmp(str,sin);
    if(n==1)
    {
        printf("第一个字符串大\n");
    } else if(n==-1)
    {
        printf("第二个字符串大\n");
    }else
    {
        printf("两个一样大\n");
    }
    return 0;
}

 

4、自定义函数(my_strcat)实现strcat函数的功能

        strcat功能:将后面的字符串加到前面字符串后面

//自定义函数(my_strcat)实现strcat函数的功能
#include<stdio.h>
void my_strcat(char *one,char *two)
{
    while(*one)     //将*one遍历到\0时结束
    {
        *one++; //每次循环后移一位
    }
    *one=*one-1;       //指针前移到\0前面
    while(*two)     
    {
        *one=*two;  //将*two加到*one 后面
        *one++;
        *two++;
    }
    *one='\0';  //在*one结尾加上\0
}

//主函数
int main(int argc, char const *argv[])
{
    char str[100]={0};
    char sin[100]={0};
    printf("输入第一个字符串:");
    gets(str);
    printf("输入第二个字符串:");
    gets(sin);
    my_strcat(str,sin);
    printf("连接后结果为:%s\n",str);
    return 0;
}

  

5、自定义函数(my_strstr)实现求src字符串中是否包含子串dest字符串

        strstr功能:判断前字符串是否包含后字符串,即判断后字符串是否是前字符串的子字符串。

#include<stdio.h>
int my_strstr(const char *one,const char *two)
{
    const char* a = one;        
	const char* b = two;        //记录子串当前字符串
    char* c = one;              //    *a==*c==one       *b==two
    while(*c)
    {
        a=c;        //每次内循环结束,将c的值赋给a
        b=two;  //每次内循环结束,将two的值赋给b,two是固定值,这样b每次都是重新开始

        while(*a==*b&&*a!='\0'&&*b!='\0')   
        {
            *a++;        //该循环内,*a和*b都改变,但循环结束后又会重新赋值
            *b++;
        }
        
        if(*b=='\0')    
        {
            return 1;
        }
        *c++;
    }
    return 0;
}

//主函数
int main(int argc, char const *argv[])
{
    char str[100]={0};
    char sin[100]={0};
    printf("输入第一个字符串:");
    gets(str);
    printf("输入第二个字符串:");
    gets(sin);
    int k=my_strstr(str,sin);
    if(k==1)
    {
        printf("包含\n");
    }else
    {
        printf("不包含\n");
    }
    
    return 0;
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值