模拟实现 strncpy, strncat, strncmp

一:模拟实现strncpy

库函数中的strncpy的参数:

char *strncpy(char *strDest, const char *strSource, size_t count)

strncpy 可以将源字符串内容 拷贝到 目标字符串里,拷贝的元素个数可以自己规定。

示例:

#include<stdio.h>
#include<string.h>
int main()
{
    char arr1[20] = "hello world";
    char arr2[20] = "funny";
    strncpy(arr1, arr2, 3); //  会覆盖,但是后面的内容会继续打出来  结果funlo world
    //strncpy(arr1, arr2, 8);   // arr2 中的拷贝元素个数 超过 实际存在的个数   会把arr2中的 \0  拷贝进去 arr1  并且停止  结果是 funny
    printf("%s\n", arr1);
    system("pause");
    return;
}

模拟实现strncpy 代码为:

#include<stdio.h>
#include<string.h>
#include<assert.h>
char *my_strncpy(char *dest,const char *src, int count)
{
    assert(src && dest);
    char * tmp = dest;
    while (*src != '\0'&& count != 0)  
    {       
        *dest = *src;
        count--;
        dest++;
        src++;
    }
    //跳出循环
    if (count > 0)   //  *src==0
    {
        *dest = '\0';
    }
    //else if (count == 0)  // count==0,把要拷贝的个数全部拷贝完了
    //{
    //         ;
    //}
    return tmp;
}

int main()
{
    char arr1[20] = "hello world";
    char arr2[20] = "funny";
    my_strncpy(arr1, arr2, 3);
    my_strncpy(arr1, arr2, 8);
    printf("%s\n", arr1);
    system("pause");
    return;
}

结果:
1.my_strncpy(arr1, arr2, 3); //拷贝3个字符
这里写图片描述

2.my_strncpy(arr1, arr2, 8); //拷贝8个字符
这里写图片描述


二:模拟实现strncat

库函数中的strncat的参数:

char *strncat(char *strDest, const char *strSource, size_t count)

strncat函数可以将 源字符串中 count 个字符 追加到目标字符串后面。

示例:

#include<stdio.h>
#include<string.h>
int main()
{
    char arr1[20] = "hello ";
    char arr2[20] = "sanzi";
    strncat(arr1, arr2, 3);     //结果是 hello san
    strncat(arr1, arr2, 6);    // 结果是 hello sanzi
    printf("%s\n", arr1);
    system("pause");
    return;
}

模拟实现strncat 代码为:

#include<stdio.h>
#include<string.h>
#include<assert.h>
char *my_strncat(char *dest, const char *str, size_t count)
{ 
    assert(dest && str);   //断言,不能指针不能为空
    char *tmp = dest;
    int len = strlen(dest);
    dest = dest + len ;   //要在目标字符串的后面追加字符,所以指针定位在 目标字符串的后面的一个位置,所以不用-1
    while (count--)
    {
        *dest = *str;
        str++;
        dest++;
    }
    return tmp;
}

int main()
{
    char arr1[20] = "hello ";
    char arr2[20] = "sanzi";
    my_strncat(arr1, arr2, 3);
    printf("%s\n", arr1);
    system("pause");
    return;
}

结果:
这里写图片描述


三:模拟实现strncmp

库函数中的strncat的参数:

int strncmp(const char *string1, const char *string2, size_t count)

strncmp 可以比较两个字符串的大小,比较的内容是字符串 前count个字符。
如果前者大,返回值为正数;如果后者大,返回值为负数;如果二者一样大,返回值为0;

示例:

#include<stdio.h>
#include<string.h>
int main()
{
    char arr1[20] = "abcdef ";
    char arr2[20] = "addd";
    int ret = strncmp(arr1, arr2, 4);
    printf("%d\n", ret);  // 返回值是正数1,库函数默认值为1
    system("pause");
    return;
}

模拟实现strncmp 代码为:

#include<stdio.h>
#include<string.h>
#include<assert.h>
int my_strncmp(const char *str1, const char *str2, size_t count)
{
    assert(str1 && str2);
    while (count--)
    {
        if (*str1 == *str2)
        {
            str1++;
            str2++;
        }
        else
            break;
    }
    return *str1 - *str2;
}


int main()
{
    char arr1[20] = "abcdef ";
    char arr2[20] = "abhehe ";
    char arr3[20] = "hahah";
    char arr4[20] = "abcdef";
    my_strncmp(arr1, arr2, 3);
    int ret = my_strncmp(arr1, arr2, 4);
    printf("%d\n", ret);
    system("pause");
    return;
}

结果:
1. char arr2[20] = “abhehe “;
这里写图片描述

2.char arr3[20] = “hahah”;
这里写图片描述

3.char arr4[20] = “abcdef”;
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值