欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

10. C语言string库函数有strlen,strcpy,strcmp,strcat,strstr实现

程序员文章站 2024-03-24 23:58:16
...

   string.h 是C语言标准库中一个常用的头文件,在使用到字符数组时需要使用。

  常用函数有strlen,strcpy,strcmp,strcat,strstr等等,更详细的可以到include文件夹里面查看该文件。

1.strlen

  功能:求字符串长度, \0 停止查找。

  实现方式:计数器,递归,指针减法。

    //1.计数器实现
    int strlen(const char* ptr)
    {
        // 非法输入
        if(ptr == NULL) 
        {
            return -1;
        }

        int count = 0;
        while (*(ptr++))
            count++;
        return count;
    }

    //2.递归实现
    int strlen(char* ptr)
    {
        // 非法输入
        if(ptr == NULL) 
        {
            return -1;
        }

        if (*ptr != '\0')
            return my_strlen(ptr + 1)+1;
        return 0;
    }

    //3.指针运算实现
    int strlen(char* ptr)
    {
        // 非法输入
        if(ptr == NULL) 
        {
            return -1;
        }

        char* pc = ptr;
        while (*pc)
            pc++;
        return pc - ptr;
    }

2. strcpy

  功能:字符串拷贝。

  把从src地址开始且含有NULL结束符的字符串复制到以dest开始的地址空间。src和dest所指内存区域不可以重叠且dest必须有足够的空间来容纳src的字符串。

char* strcpy(char* dest, const char* src) 
{
    char* tmp = src;
    // 非法输入
    if (dest == NULL || src == NULL) {
        return NULL;
    }
    while ((*(dest++) = *(tmp++))){};
    return dest;
}

3.strcmp

  功能:字符串比较。

  返回值:两个字符串相等返回0,不等,则判断短串最后一位字符的ASCII值与长串相同位ASCII值的大小,str1大,返回值一个大于零的数,str1小,返回一个小于零的数。

int strcmp(const char* str1, const char* str2)
{
    // 非法输入
    if(str1==NULL || str2==NULL) 
    {
        return NULL;
    }
    while (*str1 == *str2)
    {
        if (*str1 == '\0')
        return 0;
        str1++;
        str2++;
    }
    return *str1 - *str2;
}

4.strcat

  功能:字符串连接。

    char* strcat(char* dest,const char* src)
    {
        // 非法输入
        if(dest==NULL || src==NULL) 
        {
            return NULL;
        }

        char* ret = dest;
        // while (*++dest);
        // 单一 前置++ 也有问题,如果是一个空串,则直接结束

        while (*dest)
        {
            dest++;
        }
        while (*dest++ = *src++);
            return ret;
    }

5.strstr

  功能:查找子字符串。

  在一个字符串中查找一个字符串,返回一个指针为这个子串第一次在母串中出现的位置。

char* strstr(const char* str, const char* substr)
{
    // 非法输入
    if(str==NULL || substr==NULL) 
    {
        return NULL;
    }
    const char* s1 = str;
    const char* s2 = substr;
    const char* cp = str;

    //查找的子串为空,返回母串
    if (!*substr)
        return (char*)str;
    while (*cp)
    {
        cp = s1;
        while (*s1 && *s2 && (*s1 == *s2))
        {
            s1++;
            s2++;
        }
        if (!*s2)
            return (char*)cp;
        s1 = ++cp;
    }
    return NULL;
}