模拟实现strcpy,strcmp,strcat,strstr.strlen
发布日期:2021-09-19 03:18:16 浏览次数:4 分类:技术文章

本文共 2205 字,大约阅读时间需要 7 分钟。

strcpy函数实现

strcpy :字符串拷贝函数,  函数原型 char* strcpy(char* dest,char* src)    从stc的起始地址开始,到'\0'结束。 所以dest必须有足够的空间来容纳src。头文件#include<string.h>

char* my_strcpy(char* dest, const char* src){	assert(dest);	assert(src);	char* ret = dest;	while ((*dest++) = (*src++))	{		;	}	return ret;}
测试部分
int main(){	char arr[20];	char* str= "hello ";	char* ret = my_strcpy(arr, str);	printf("%s\n", ret);	system("pause");	return 0;}

strcat函数实现

strcat :字符串连接函数 ,把src指向的字符串添加到dest后,(src直接覆盖dest结尾处的‘\0’)  原型  char* strcat(char *dest,const char* src); 
 头文件#include<string>
 注意事项: dest和src俩块空间不能有重叠部分,dest必须有足够大的空间来容纳srt,返回dest的指针
char* my_strcat(char* dest, const char* src){	char* ret = dest;	assert(dest);	assert(src);	while (*dest)	{		*dest++;	}	while (*dest++ = *src++)	{		;	}	return ret;}
测试部分
int main(){	char arr1[20] = "hello";	char arr2[] = "sust";	char* ret = my_strcat(arr1, arr2);	printf("%s\n", ret);	system("pause");	return 0;}
arr1 的空间一定要足够大

strcmp函数实现

strcmp:字符串比较函数,俩个字符串自左向右逐个字符比较(按ASCIIZ值的大小比较)直到出现不同的字符或者‘\0’。若这俩个字符串为str1,str2,
            若str1==str2,返回0;
            若str1>str2 ,返回正数;
            若str1<str2,返回负数;
                 
int my_strcmp(const char* dest,const char* src){	int ret = 0;	while (*dest == *src)	{		if (*dest == '\0')		{			return 0;		}		*dest++;		*src++;	}	return *dest - *src;}
测试 
int main(){	char arr1[10] = "sust";	char arr2[10] = "sust";	int ret = my_strcmp(arr1, arr2);	printf("%d\n", ret);	system("pause");	return 0;}

strstr函数实现

 strstr:在字符串中找子串   char* strstr(char* str1,char * str2)  在str1中找str2,如果找到了返回strp2在str1中首次出现的地址,如果没找到返回NULL。
char* my_strstr(const char* str1, const char* str2){	char *cp = (char*)str1;	char *substr = (char*)str2;	char *s1 = str1;	assert(str1);	assert(str2);	if (*str2 == '\0')		return NULL;	while (*cp)	{		s1 = cp;		substr = str2;		while (*s1&&*substr && (*s1 == *substr))		{			s1++;			substr++;		}		if (*substr == '\0')			return cp;		cp++;	}}

strlen函数实现

strlen:求字符串长度函数,从开始直到遇到'\0'结束,返回计数器的值不包含‘\0
’;
法一:
int my_strlen(const char *str){	int count = 0;	while (*str)	{		count++;		str++;	}	return count;}
法二:递归法
int my_strlen(const char *str){	if (*str=='\0')		return 0;	else		return 1 + my_strlen(str + 1);}
测试
int main(){	char arr[10] = "hello";	int ret = my_strlen(arr);	printf("%d\n", ret);	system("pause");	return 0;}

转载地址:https://blog.csdn.net/audience_fzn/article/details/76794358 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:通讯录动态实现
下一篇:动态顺序表

发表评论

最新留言

哈哈,博客排版真的漂亮呢~
[***.90.31.176]2024年03月31日 17时27分23秒