C语言模拟实现strcpy、strncpy、strcmp、strcat、strstr

来源:互联网 发布:女程序员物品 编辑:程序博客网 时间:2024/06/06 02:18

1,模拟实现strcpy

功能:字符串拷贝函数
代码:

char* my_strcpy(char* dest, const char* src){    assert(dest);    assert(src);    char* ret = dest;    while (*dest++ = *src++)    {        ;    }    return ret;}

测试:

int main(){    char str1[20];//必须给足够大的空间保证str2能存储    char* str2 = "HowAreYou";    char* ret = my_strcpy(str1, str2);    printf("%s\n", ret);    system("pause");    return 0;}

这里写图片描述

2,模拟实现strncpy

功能:类似于strcpy,可以将字符串中的n个字符拷贝
代码:

char* my_strncpy(char* dest, const char* src, int n){    assert(dest);    assert(src);    char* ret = dest;    while (n)    {        *dest++ = *src++;        n--;    }    if (*(dest - 1) != '\0');    {        *dest = '\0';    }    return ret;}

测试:

int main(){    char str1[5];    char* str2 = "abcdefg";    char* ret = my_strncpy(str1, str2,4);    printf("%s\n", ret);    system("pause\n");    return 0;}

这里写图片描述

3,模拟实现strcmp

功能:字符串比较函数,相等返回0,小于返回小于0的数,大于则返回大于0的数
代码:

int my_strcmp(char* arr, char* str){    assert(arr);    assert(str);    while (*arr == *str)    {        if (*arr == '\0' || *str == '\0')        {            return 0;        }        arr++;        str++;    }    return *arr - *str;}

测试:

int main(){    char *p1 = "ab";    char *p2 = "abcd";    char *p3 = "defab";    printf("%d\n", my_strcmp(p1, p1));    //0      printf("%d\n", my_strcmp(p1, p2));    //-99     printf("%d\n", my_strcmp(p1, p3));    //-3     printf("%d\n", my_strcmp(p3, p1));    //3    system("pause\n");    return 0;}

这里写图片描述

4,模拟实现strcat

功能:字符串追加函数
代码:

char* my_strcat(char* dest, char* src){    assert(dest);    assert(src);    char* ret = dest;    while (*dest)    {        *dest++;    }    while (*dest++ = *src++)    {        ;    }    return ret;}

测试:

int main(){    char str1[20] = "hello ";    char* str2 = "world";    char* ret = my_strcat(str1, str2);    printf("%s\n", ret);    system("pause\n");    return 0;}

这里写图片描述

5,模拟实现strstr

功能:判断一个字符串是否是另一个字符串的子串,如果是,则返回在这个字符串中首次出现的位置,如果不是,返回NULL
代码:

char* my_strstr(const char* str, const char*substr){    const char* s1 = str;    const char* s2 = substr;    const char*  cur = str;    assert(str);    assert(substr);    if (*substr == '\0')    {        return str;    }    while (cur)    {        s1 = cur;        s2 = substr;        while (*s1 == *s2)        {            s1++;            s2++;        }        if (*s2 == '\0')            return cur;        if (*s1 == '\0')            return NULL;        cur++;    }    return NULL;}

测试:

int main(){    const char* str = "abcdefg";    const char* substr = "bcd";    char* ret = my_strstr(str, substr);    if (ret == NULL)    {        printf("No\n");    }    else    {        printf("%s\n", ret);    }    system("pause\n");    return 0;}

这里写图片描述

阅读全文
1 0