我是靠谱客的博主 香蕉樱桃,最近开发中收集的这篇文章主要介绍用C语言模拟实现字符串库函数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

  1. 模拟实现strlen库函数

作用 :求一个字符串的长度

注意事项:字符串已经 '' 作为结束标志,strlen函数返回的是在字符串中 '' 前面出现的字符个数 (不包 含 '' );

参数指向的字符串必须以结束不然结果为随机值

注意此函数的返回值为size_t,本质是无符号整型

现在来模拟实现

#include<stdio.h>
#include<assert.h>
size_t  my_strlen1(const char* arr)
{
    assert(arr!=NULL);
    if (*arr == '')
    {
        return 0;
    }
    else
    {
        return 1 + my_strlen1(arr + 1);
    }
}
size_t my_strlen2(const char* arr)
{
    size_t flag = 0;
    while (*arr++ != '')
    {
        flag++;
    }
    return flag;
}
size_t my_strlen3(const char* arr)
{
    char* start = arr;
    while (*arr != '')
    {
        arr++;
    }
    return arr - start; //指针减去指针返回的是俩指针之间的元素个数
}
int main()
{
    char arr[30] = "abcdef";
    printf("%d", my_strlen3(arr));
    return 0;
}

这样就通过了三种方式实现了这个库函数

  1. 模拟实现strcpy

作用:实现将一个字符串拷贝到另一个字符串上

注意:1.源子符必须以结束

2.会将源字符串中的拷贝到目标空间

3.目标空间必须足够大,以确保存放源字符串

4.目标字符串不能是常量字符串

5.返回值是源字符串的地址

#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* arr1, const char* arr2)
{
    assert(arr1 && arr2);
    char* start = arr1;
    while (*arr2 != '')
    {
        *arr1 = *arr2;
        arr1++;
        arr2++;
    }
    return start;
}
int main()
{
    char arr1[40] = "xxxxxxx";
    char arr2[] = "Hello World";
    printf("%s", my_strcpy(arr1, arr2));
    return 0;
}

  1. 模拟实现strcat

作用:实现在一个字符串上追加一个新的字符串

返回值为源字符串的地址

注意:源字符串必须以 '' 结束。 目标空间必须有足够的大,能容纳下源字符串的内容。 目标空间必须可修改。 此函数不能自己给自己追加。否则会造成程序的崩溃

#include<stdio.h>
#include<assert.h>
char* my_strcat(char* arr1, const char* arr2)
{
    assert(arr1 && arr2);
    char* start = arr1;
    while (*arr1 != '')
    {
        arr1++;
    }
    while ((*arr1++=*arr2++))
    {
        ;
    }
    return start;
}
int main()
{
    char arr1[40] = "xxxxxxxx";
    char arr2[] = "Hello world";
    printf("%s", my_strcat(arr1, arr2));
    return 0;
}

  1. 模拟实现strcmp

作用:实现俩个字符串之间的比较,在比较过程中俩个字符串的内容都不能变

标准规定:1.第一个字符串大于第二个字符串时候,返回大于0的数字

2.第一个字符串等于第二个字符串,则返回0

3.第一个字符串小于第二个字符串,则返回小于0的数字

#include<stdio.h>
#include<assert.h>
int my_strcmp(const char* arr1, const char* arr2)
{
    assert(arr1 && arr2);
    while (*arr1 == *arr2&&*arr1!=''&&arr2!='')
    {
        arr1++;
        arr2++;
    }
    if ((*arr1) == '' || (*arr2) == '')
    {
        return 0;
    }
    else
    {
        return (int)*arr1 - (int)*arr2;
    }


}
int main()
{
    char arr1[] = "abcde";
    char arr2[] = "abc";
    char arr3[] = "abd";
    char arr4[] = "abb";
    int ret1 = my_strcmp(arr1, arr2);
    int ret2 = my_strcmp(arr1, arr3);
    int ret3 = my_strcmp(arr1, arr4);
    printf("%d %d %d", ret1, ret2, ret3);
    return 0;
}

下面看一下运行结果

  1. 模拟实现strncpy

拷贝num个字符从源字符串到目标空间。 如果源字符串的长度小于num,则拷贝完源字符串之后,在目标的后边追加0,直到num个。

#include<stdio.h>
char* my_strncpy(char* destination, const char* source, size_t num)
{
    char* start = destination;
    while (num)
    {
        if (*source != '')
        {
            *destination = *source;
            destination++;
            source++;
            num--;
        }
        else
        {
            *destination = '';
            destination++;
            num--;
        }

    }
    return start;
}
int main()
{
    char arr1[40] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
    char arr2[] = "hello world";
    my_strncpy(arr1, arr2, 20);
    return 0;
}

6 模拟实现strncat

作用:实现把一个字符的前n个字符拷贝到另一个字符串上

#include<stdio.h>
#include<assert.h>
char* my_strncaat(char* arr1,const  char* arr2, size_t num)
{
    assert(arr1 && arr2);
    char* ch = arr1;
    while (*arr1 != '')
    {
        arr1++;
    }
    while (num)
    {
        if (*arr1++=*arr2++)
        {
            num--;
        }
        else
        {
            *arr1 = '';
            arr1++;
        }
    }
    return ch;
}
int main()
{
    char arr1[40] = "xxxxxxxxxxxxxxx";
    char arr2[] = "Hello ";
    printf("%s", my_strncaat(arr1, arr2, 3));
    return 0;
}

7.模拟实现strncmp 实现一个字符串与另一个字符串的前n个字符的比较

#include<stdio.h>
#include<assert.h>
int my_strncmp(char* arr1, char* arr2, int num)
{
    assert(arr1 && arr2);
    while (num && *arr1 != '' && *arr2 != '')
    {
        if (*arr1 == *arr2)
        {
            arr1++;
            arr2++;
            num--;
        }
        else
        {
            return (int)*arr1 - (int)*arr2;
        }
    }
}
int main()
{
    char arr1[] = "abcdefh";
    char arr2[] = "abcedfh";
    printf("%d", my_strncmp(arr1, arr2,4 ));
    return 0;
}

最后

以上就是香蕉樱桃为你收集整理的用C语言模拟实现字符串库函数的全部内容,希望文章能够帮你解决用C语言模拟实现字符串库函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部