C语言实现strcpy和strcmp

strcpy

       strcpy是库函数提供的拷贝函数,其含义是,将源地址空间里的字符串拷贝到目标字符串中,是针对字符串的一种操作,该函数有两个参数,两个参数的类型都是char*,第一个参数是目标地址,第二个参数是源地址;
例如
char str1[10];
char str2[]=”China”;
strcpy(str1,str2)
输出:China

实现思路:
       1、通常字符串最后一个位置都会有一个默认的’\0’,定义两个指针,分别指向源地址的起始地址和目标地址的起始地址;
       2、将源字符串一个一个的赋值给目标字符串,当源字符串遇到‘\0’时,赋值结束;
       3、在目标字符串后面给他加上’\0’;
       4、返回目标地址空间的首地址;

代码实现:

#include<stdio.h>
#include<string.h>
#include<assert.h>

char* my_strcpy(char* str1, char* str2)
{
    assert(str2);//判断源地址是否为空;
    char* cur = str1;
    while (*str2 != '\0')
    {
        *str1 = *str2;
        str1++;
        str2++;
    }
    *str1 = '\0';
    return cur;
}

int main()
{
    char str1[10];
    char str2[10] = "China";
    printf("%s\n", my_strcpy(str1, str2));
    return 0;
}

运行结果:
这里写图片描述

strcmp

       strcmp是库函数提供的字符串比较函数,其含义是,将源地址空间里的字符串与目标字符串相互比较,是针对字符串的一种操作,该函数有两个参数,两个参数的类型都是char*,第一个参数是目标地址,第二个参数是源地址;
比较规则:
       对两个字符串自左至右逐个字符相比(按ASCII码值大小比较),直到出现不同的字符或遇到‘\0’为止。如果全部字符相同,则认为相等;若出现不相同的字符,则以第一个不相同的字符的比较结果为准。
       如果两个字符串都由英文字母组成,则有一个简单的规律:在英文字典中位置在后面的为“大”,还要特别注意:小写字母比大写字母“大”。

返回值:
(1)字符串1=字符串2,返回0;
(2)字符串1>字符串2,返回1;
(3)字符串1<字符串2,返回-1;

实现思路:
       1、通常字符串最后一个位置都会有一个默认的’\0’,定义两个指针,分别指向源地址的起始地址和目标地址的起始地址;
       2、将源字符串与目标字符串一个一个的比较,当源字符串与目标字符串不相等的时候,循环结束,并且对当前字符进行比较,当源字符比目标字符的ASCII大时,返回1,当源字符比目标字符的ASCII小时,返回-1;
       3、当目标或源字符串走到’\0’时,判断两个字符是否都走到了‘\0’,如果是,则返回0;
实现代码:

#include<stdio.h>
#include<string.h>
#include<assert.h>

int my_strcmp(const char *str1, const char *str2)
{
    assert(str1);
    assert(str2);
    while (*str1++ == *str2++)
    {
        if (*str1 == '\0') 
            return 0;
    }

    if (*str1 - *str2) //不等的情况
        return 1;
    else
        return -1;

}


int main()
{

    char str3[10] = "Hello";
    char str4[10] = "China";
    printf("%d\n", my_strcmp(str3, str4));
    return 0;
}

运行结果:
这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_42820622/article/details/81637225
今日推荐