2024.7.12 作业

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

代码:

#include <stdio.h>
int my_strlen(const char *arr)
{
    static int i = 0;
    if (*(arr + i) == '\0')
    {
        return i;
    }
    else
    {
        i++;
        my_strlen(arr);
    }
}
int main(int argc, char const *argv[])
{
    char arr[20] = "";
    int num = 0;
    printf("请输入一个字符串:");
    gets(arr);
    num = my_strlen(arr);
    printf("该字符串的长度为:%d\n", num);
    return 0;
}

结果:

e1508e6ac7bd48df96fc907b74283fed.png

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

代码:

#include <stdio.h>
void my_strcpy(char *arr[], const char *brr[])
{
    *arr=*brr;
}
int main(int argc, char const *argv[])
{
    char arr[20] = "";
    char brr[20] = "";
    printf("请输入一个字符串:");
    gets(brr);
    my_strcpy(arr, brr);
    printf("复制后数组的结果是:%s\n", arr);
    return 0;
}

结果:

7ac0bd9c17344bdfbe0be8fe6ebb26c4.png

3、自定义函数(my_strcmp)实现strcmo函数的功能

代码:

#include <stdio.h>
int my_strcmp(char *str1, char *str2)
{
    if (str1 != NULL && str2 != NULL)
    {
        while (*str1++ != '\0' && *str2++ != '\0')
        {
            if (*str1 > *str2)
                return 1;
            else if (*str1 < *str2)
                return -1;
            else
                continue;
        }
        //如果两个都为空,直接返回0
        if ((*str1 == '\0') && (*str2 == '\0'))
            return 0;
        //如果前一个为空后一个不为空,s1<s2,返回-1
        else if ((*str1 == '\0') && (*str2 != '\0'))
            return -1;
        //前一个不为空后一个为空,s1>s2,返回1
        else if ((*str1 != '\0') && (*str2 == '\0'))
            return 1;
        //只剩下s1=s2的情况
        else
            return 0;
    }
}
int main(int argc, char const *argv[])
{
    char arr[20] = "";
    char brr[20] = "";
    printf("请输入第一个字符串:");
    scanf("%s", &arr);
    printf("请输入第二个字符串:");
    scanf("%s", &brr);
    int n = 0;
    n = my_strcmp(arr, brr);
    switch (n)
    {
    case 1:
        printf("1比2大\n");
        break;
    case 0:
        printf("一样大\n");
        break;
    case -1:
        printf("1比2小\n");
        break;
    default:
        printf("error\n");
    }
    return 0;
}

结果:

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

代码:

#include <stdio.h>
char *my_strcat(char *str1, const char *str2)
{
    while (*str1 != '\0')
    {
        str1++;
    }
    while (*str2 != '\0')
    {
        *str1++ = *str2++;
    }
    *str1 = '\0';
}
int main(int argc, char const *argv[])
{
    char arr[20] = "";
    char brr[20] = "";
    printf("请输入第一个字符串:");
    scanf("%s", &arr);
    printf("请输入第二个字符串:");
    scanf("%s", &brr);
    my_strcat(arr, brr);
    printf("%s\n", arr);
    return 0;
}

结果:

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

代码:

#include <stdio.h>
char *my_strstr(const char *arr, const char *brr)
{
    // 初始化三个字符指针
    char *s1 = NULL;
    char *s2 = NULL;
    char *stu = (char *)arr;

    // 如果brr为空字符串,则返回p1的首地址
    if (*brr == '\0')
    {
        return (char *)arr;
    }
    // 遍历字符串arr
    while (*stu)
    {
        // 将s1和s2分别指向stu和brr的当前字符,开始新一轮的比较
        s1 = stu;
        s2 = (char *)brr;
        // 内部循环,逐个比较s1和s2指向的字符,如果相同则继续比较下一个字符
        while (*s1 && *s2 && (*s1 == *s2))
        { // '\0'的ASCII码值是0,视为假
            s1++;
            s2++;
        }
        // 如果s2已经指向结束符'\0',则说明在stu开始的位置找到了子串brr,返回stu
        if (*s2 == '\0')
        {
            return stu; // 找到子串p2
        }
        // 如果s1已经指向结束符'\0',说明当前stu所在子串长度不足以匹配brr,终止本次查找
        if (*s1 == '\0')
        {
            return NULL;
        }
        // 移动stu指针,使其指向下一个可能的子串起始位置
        *stu++;
    }
    // 遍历结束后仍未找到子串brr,则返回NULL
    return NULL; // 没找到
}
int main(int argc, char const *argv[])
{
    char arr[20] = "";
    char brr[20] = "";
    printf("请输入第一个字符串:");
    scanf("%s", &arr);
    printf("请输入第二个字符串:");
    scanf("%s", &brr);
    const char *ret = my_strstr(arr, brr);
    // 根据返回值判断查找结果
    if (ret == NULL)
    {
        printf("no\n");
    }
    else
    {
        printf("yes\n");
    }
    return 0;
}

结果:

  • 39
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值