C语言 实现字符串的复制

1.将字符串a的数据复制到字符串b中

(5.for循环指针来实现 )------注释掉部分采用的是此方法

#include <stdio.h>
int main()
{
    void copy_string(char from[], char to[]);
    char a[]="I am a student.";
    //char a[11];
    //for (int i = 0; i < 10; i++)
    //{
    //    scanf("%c", &a[i]);
    //}
    char b[] = "You are a teacher.";
    printf("string a=%s\nstring b=%s\n", a, b);
    printf("copy string a to string b:\n");
    copy_string(a, b);
    printf("\nstring a=%s\nstring b=%s\n", a, b);
    return 0;
}
void copy_string(char from[], char to[])
{
    int i = 0;
    while (from[i] != '\0')
    {
        to[i] = from[i];
        i++;
    }
    to[i] = '\0';
}

 2.char * str_copy

char* str_copy1(char* d, char* s);
char* str_copy2(char* d, char* s);
char* str_copy3(char* d, char* s);

int main(void) 
{
    char d[] = "qwerrt";
    char s[] = "asdf213";
    char* p;
    //p = str_copy1(d,s);
    //p = str_copy2(d,s);
    p = str_copy3(d, s);
    puts(p);
    // printf("%s\n",p);
    return 0;
}

char* str_copy1(char* d, char* s) 
{
    int i=0;
    while (s[i] != '\0') 
    {
        d[i] = s[i];
        i++;
    }
    d[i] = '\0';
    return d;
}

char* str_copy2(char* d, char* s) 
{
    if (d == NULL || s == NULL)
        return NULL;

    if (d == s)
        return d;

    char* t = d;
    while ((*d++ = *s++) != '\0');
    return t;
}

char* str_copy3(char* d, char* s)
{
    char* pd = d, * ps = s;
    int i = 0, nd = 0, sd = 0;
    while (*pd != '\0') 
    {    //计算目标字符串长度
        nd++;
        pd++;
    }
    while (*ps != '\0')
    {    //计算源字符串长度
        sd++;
        ps++;
    }

    int dif = nd - sd;       //地址差

    if (dif < 0)
    {
        while (d[i] != '\0') 
        {
            d[i] = s[i];
            i++;
        }
        d[i] = '\0';
    }
    else {
        while (s[i] != '\0') 
        {
            d[i] = s[i];
            i++;
        }
        d[i] = '\0';
    }
    return d;
}

 3.数组的方式实现(访问下标)

#include<stdio.h>

//第一种方法:使用数组下标访问
void Copy1(char* des, char* src)
{
    int i;
    for (i = 0; src[i] != '\0'; i++)//当src[i]出现'\0'时,代表字符串遍历结束
    {
        des[i] = src[i];//给des[i]赋值
    }
    des[i] = '\0';//给复制好的des[i]的结尾加上'\0',代表字符串的结束
}
int main()
{
    char arr[10] = "abcdefg";
    char brr[10];
    Copy1(brr, arr);//调用函数1
    printf("holle world %s", brr);//输出复制好的字符串数组brr
    printf("\n");
    return 0;
}

4.使用指针解引用的方式实现 

//第一种方法:使用指针解引用访问(原理:利用p[i]等价于*(p+i))
#include<stdio.h>

void Copy2(char* des, char* src)
{
    int i;
    for (i = 0; *(src + i) != '\0'; i++)//当src出现'\0'时,代表字符串遍历结束
    {
        *(des + i) = *(src + i);//给des赋值
    }
    *(des + i) = '\0';//给复制好的des的结尾加上'\0',代表字符串的结束
}
int main()
{
    char arr[10] = "abcdefg";
    char brr[10];
    Copy2(brr, arr);//调用函数2
    printf("holle world %s", brr);//输出复制好的字符串数组brr
    printf("\n");
    return 0;
}

编著注:以上对本小题的代码编写的多种方法,欢迎大家收藏借鉴并转发;

               以上代码仅供参考,如有问题欢迎大家在留言区批评指正;

               版权所有,翻印必究,如有雷同纯属巧合,转载请注明出处。

               By CRH380AJ2808 2022.06.09
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/JH13thpig/article/details/125183968
————————————————
 

猜你喜欢

转载自blog.csdn.net/JH13thpig/article/details/125194827