C手写字符串覆盖、追加、比较、查找函数

发布时间:2024年01月04日

#define _CRT_SECURE_NO_WARNINGS 1

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

//字符串拷贝
char* my_strcpy(char* dest, const char* src)
{
?? ?char* ret = dest;
?? ?assert(dest!=NULL);//在代码中进行断言检查。
?? ?assert(src!=NULL);//在代码中进行断言检查。
?? ?while (*src!='\0')//我们要对src解引用可是有可能里面存在空值,
?? ?{
?? ??? ?*dest = *src;
?? ??? ?src++;
?? ??? ?dest++;
?? ?}
?? ?*dest = *src;//\0
?? ?return ret;
}

char* my_strcpy1(char* dest, const char* src)
{
?? ?char* ret = dest;
?? ?assert(dest != NULL);
?? ?assert(src != NULL);
?? ?//在while条件判断的位置,\0在条件判断时被视为 false,所以当 *src 的值为 ‘\0’ 时,循环条件为 false,循环终止。
?? ?while(*dest++ = *src++)
?? ?{

?? ?}
?? ?return ret;
}
?? ?
//字符串连接,从源头追加到目的地后边
char* my_strcat(char* dest,const char* src)?
{
?? ?char* ret = dest;
?? ?assert(dest != NULL);
?? ?assert(src != NULL);
?? ?while (*++dest)//检查/0
?? ?{

?? ?};
?? ?while (*dest++ =*src++)
?? ?{

?? ?};
?? ?return ret;
}

//字符串比较
int my_strcmp(const char* str1, const char* str2)
{
?? ?while (*str1 == *str2)
?? ?{
?? ??? ?assert(str1&&str2);
?? ??? ?if (*str1 == '\0')
?? ??? ??? ?return 0;
?? ??? ?str1++;
?? ??? ?str2++;
?? ?}
?? ?return (*str1 - *str2);
}

//字符串查找
char* my_strstr(char *str1,char *str2)?
{
?? ?char* cp = str1;
?? ?char* s1 = cp;
?? ?char* s2 = str2;
?? ?if (*str2 == '\0')
?? ?{
?? ??? ?return str1;
?? ?}
?? ?while (*cp)?
?? ?{
?? ??? ?//开始匹配
?? ??? ?s1 = cp;
?? ??? ?s2 = str2;
?? ??? ?while (*s1 && *s2 && *s1==*s2)?
?? ??? ?{
?? ??? ??? ?s1++;
?? ??? ??? ?s2++;
?? ??? ?}
?? ??? ?if (*s2 == '\0')?
?? ??? ?{
?? ??? ??? ?return cp;
?? ??? ?}
?? ??? ?cp++;
?? ?}
?? ?return NULL;
}


int main()?
{
?? ?char arr1[20] = "hello world";
?? ?char arr2[] ? = "xxxxxxx";
?? ?printf("%s\n", my_strcpy(arr1, arr2));
?? ?printf("%s\n",my_strcpy1(arr1, arr2));

?? ?char arr3[20] = "hello";
?? ?char arr4[] = "world";
?? ?printf("%s\n",my_strcat(arr3,arr4));

?? ?int ret = my_strcmp("bdq","bcq");
?? ?if (ret > 0)?
?? ?{
?? ??? ?printf("str1");
?? ?}

?? ?char arr5[] = "abbbcdef";
?? ?char arr6[] = "bcd";
?? ?char* ret1= my_strstr(arr5,arr6);
?? ?if (ret1 != NULL)
?? ?{
?? ??? ?printf("%s\n", ret1);
?? ?}
?? ?else
?? ?{
?? ??? ?printf("找不到\n");
?? ?}

?? ?return 0;
}

文章来源:https://blog.csdn.net/qq_54933168/article/details/135364637
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。