温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C语言模拟实现strcpy函数,strcat函数,strcmp函数

发布时间:2020-05-30 14:05:32 来源:网络 阅读:1890 作者:柠檬dream 栏目:编程语言

 字符串作为C语言中比较重要的一部分,学好这一部分需要我们多理解.分析。我们在学习的过程中先在脑海中有一个清晰的思路,根据这个思路在电脑上敲出来。刚开始学习字符串敲出来会有很多错误,我们不要因此而放弃,记得之前一个学长说过找错误是一个程序员最快乐的,找出错误修改后我们就会有深刻的印象,慢慢的我们的错误会越来越少。想成为一名优秀的程序员,我们必须有耐心,刚开始错误再多,我们都认真对待不放过一个,慢慢的错误会越来越少。

  我觉得我学习编程,敲代码时最开心的事情就是找到错误处并且修改成功。这样在以后敲的过程中就很少在相同的地方出错。这是我自己学习编程的一些方法,希望分享出来我们可以一起学习,不好的希望你们在评论中留言哦!

 接下来我想分享的是我学习strcpy,strncpy,strcat,strncat,strcmp的一些思路和方法。

 先说说strcpy,strncpy。

 在main函数中先定义两个字符串数组char dest[10];char src[]="abcdef";将src中的字符串拷贝到dest中。用调用函数的方法实现,在main函数中传入两个数组,在调用函数中用指针来接收,char* dest,char* src.在调用函数中定义一个指针p指向dest,char* p=dest,断言一下dest和src是否存在,如果存在,当src中的内容!="\0"时,将src中的内容拷贝给dest,并且同时dest的地址加加,src的地址加加。最后返回P。

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

char *my_strcpy(char *dest, const char *src)
{
	char *p = dest; 
	assert(dest);
	assert(src);
	/*while (*dest++ = *src++)
	{
		;
	}*/
	while(*src != '\0')
	{
		*dest = *src;
		src++;
		dest++;    
	}
	*dest = *src;
	return p;
}

int main()
{
	char dest[10];
	char src[] = "asdfg";
	char *ret = my_strcpy(dest,src);
	puts(ret);
	return 0;
}

 同理strncpy跟strcpy的拷贝方法是类似的,只不过是将字符串中的前几个拷贝给另一个数组。

#include <stdio.h>
#include <string.h>
#include <assert.h>
char *my_strncpy(char *Asd,const char *Qwe,int len)
{
	char *p=Asd;
	assert(Asd);
	assert(Qwe);
    while(len)
		{
			*Asd=*Qwe;
			Asd++;
			Qwe++;
			len--;
		}
	*Asd='\0';
	return p;
}
int main()
{
	char Asd[12];
	char Qwe[]="zxcrftgytuyji";
	char *ret=my_strncpy(Asd,Qwe,3);
    puts(ret);
	return 0;
}

 strcat和strncat的思路;

 strcat是实现两个字符串的连接,我们要实现两个字符串的连接,先定义一个指针qwe指向被连接字符串数组的首地址,当指针指向的内容不为"\0"时,指针指向的地址加加,当指针指向的内容为"\0"时,将另一个数组的指针iop指向的内容赋给qwe指针指向的内容,qwe指针指向的地址加加,iop指针指向的地址加加。当指针iop指向的内容为"\0"时,循环结束。将"\0"赋给指针qwe 指向的内容。

#include <stdio.h.h>
#include <string.h>
#include <assert.h>
char *my_strcat(char *qwe,const char *iop)
{
	char *a=qwe;
	assert(qwe);
	assert(iop);
	while (*qwe!='\0')
	{
		qwe++;
	}
	while (*iop!='\0')
	{
		*qwe=*iop;
		qwe++;
		iop++;
	}
	*qwe=*iop;
	return a;
}
int main()
{
	char qwe[10]="asdfg";
	char zxc[]="iop";//*zxc="iop"    
	char *ret=my_strcat(qwe,zxc);
	puts(ret);
	return 0;
}

同理strncat连接的方法与strcat时相似的,strncat是将自身数组的前n个连接上去。

#include<stdio.h>
#include<string.h>
#include<assert.h>
char *my_strncat(char *dest,const char *str,int n)
{
	char *p=dest;
	assert(dest);
	assert(str);
	while(*dest!='\0')
	{
		dest++;
	}
	while(n)
	{
		*dest=*str;
		dest++;
		str++;
		n--;
	}
	*dest='\0';
	return p;
}
int main()
{
	char Qwe[15]="asdfgh";
	char Zxc[]="qwert";
	char *ret=my_strncat(Qwe,Zxc,3);
	puts(ret);
	return 0;
}

strcmp是比较两个字符串的大小;

  我的思路是在main函数中定义两个字符串数组,char rty[]="abcdefg"; char cvb[]="abcedfg";为了看起来简单清晰,可以使用调用函数,在main函数中传入实参,调用函数函数中用指针来接收,const char* rty,const char *cvb,注意指针最好用const保护起来,这样指针不容易被破坏,在使用指针之前断言一下指针是否存在,如果存在,创造一个循环,进入循环,当指针rty与cvb指向的内容相等时循环结束,不相等时进入循环,在循环中如果指针rty指向的内容为"\0"时,循环结束return,否则指针rty与指针cvb指向的地址加加再进行比较。当两指针指向的内容不相等时循环结束,返回值为两指针指向的内容相减,如果值大于零,rty>cvb,如果值小于零,rty<cvb,否则两字符串相等。

#include <windows.h>
#include <string.h>
#include <assert.h>
char *my_strcmp(const char *rty,const char *cvb)
{
	assert(rty);
	assert(cvb);
	while (*rty == *cvb)
	{
		if(*rty == '\0')
			return 0;
		rty++;
		cvb++;
	}
    return (*rty-*cvb);
}
int main()
{
	char rty[10]="abcdefg";
	char cvb[10]="abcedfg";
	int ret=my_strcmp(rty,cvb);
	if(ret>0)
	{
		printf("rty大");
	}
	else if(ret<0)
	{
		printf("cvb大");
	}
	else
	{
		printf("相等");
	}
	return 0;
}

 以上是我今天分享的我的一些写字符串代码的思路,如果大家有什么建议希望大家留言,我会改进的。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI