Day30~实现strcmp、strncmp、strchr、strpbrk

实现strcmp、strncmp、strchr、strpbrk

cpp 复制代码
int my_strcmp(char *s1, char *s2)
{
    if (s1 == NULL && s2 == NULL)
    {
        return 0;
    }
    if (s1 != NULL && s2 == NULL)
    {
        return 1;
    }
    if (s1 == NULL && s2 != NULL)
    {
        return -1;
    }

    while (*s1 != '\0' && *s2 != '\0')
    {
        if (*s1 > *s2)
        {
            return 1;
        }
        else if (*s1 < *s2)
        {
            return -1;
        }
        s1++;
        s2++;
    }

    if (*s1 == '\0' && *s2 == '\0')
    {
        return 0;
    }
    if (*s1 != '\0' && *s2 == '\0')
    {
        return 1;
    }
    if (*s1 == '\0' && *s2 != '\0')
    {
        return -1;
    }
}

int my_strncmp(char *s1, char *s2, size_t n)
{
    if (s1 == NULL || s2 == NULL)
    {
        return -1;
    }

    for (int i = 0; (i < n && (*s1 != '\0' && *s2 != '\0')); i++)
    {
        if (s1[i] != s2[i])
        {
            return -1;
        }
    }
    return 0;
}

char *my_strchr(char *s, int c)
{
    while (*s != '\0')
    {
        if (*s == c)
        {
            return s;
        }
        else
        {
            s++;
        }
    }
}

char *my_strpbrk(char *s, char *accept)
{
    char *temp = accept;
    char *result = NULL;

    while (*accept != '\0')
    {
        temp = strchr(s, *accept); // 查找accept第一次在字符s中出现的位置
        if (temp != NULL)          // 如果找到
        {
            result = temp;          // 将第一次找到的位置赋值给result
            while (*accept != '\0') // 再次遍历
            {
                temp = strchr(s, *accept);         // 再次查找
                if (temp != NULL && temp < result) // 如果找到且比第一次找到的位置更靠左,则取
                {
                    result = temp; // 赋值给result
                }
                accept++; // 指针后移
            }
            return result; // 返回结果
        }
    }
}
相关推荐
plus4s几秒前
3月20日(进阶11)
c++·算法
Lzh编程小栈1 分钟前
数据结构与算法——单链表超详解(C语言完整实现 + 面试高频题)
c语言·开发语言·面试
東雪木1 分钟前
软件设计师考试复习——CPU 结构、流水线、存储体系(主存 / 辅存)
学习·软件设计师复习
jyyyx的算法博客3 分钟前
【跳跃游戏】题集
算法
2301_816651223 分钟前
移动语义在容器中的应用
开发语言·c++·算法
不要秃头的小孩3 分钟前
力扣刷题——77. 组合
数据结构·python·算法·leetcode
2401_857918295 分钟前
实时数据处理中的C++应用
开发语言·c++·算法
2401_884563245 分钟前
C++中的装饰器模式实战
开发语言·c++·算法
聆风吟º7 分钟前
【C标准库】C语言memset函数详解:从原理到实战避坑
c语言·开发语言·库函数·memset
MicroTech202510 分钟前
微算法科技(NASDAQ :MLGO)抗量子区块链技术:筑牢量子时代的数字安全防线
科技·算法·区块链