字符串函数模拟(一)

引言:以下关于函数的模拟仅仅关于函数的部分效果进行模拟,并不能完全代替库函数。

一·strcpy(字符串复制函数)

此图来自于C++官网,关于strcpy的参数以及返回类型的说明。

1·首先我们要知道strcpy函数的效果如何------将一段字符串复制到另一段字符串中,str---string(字符串),cpy---copy(复制)。

效果如下: 

2·原理:通过指针将需要复印的字符串与存字符串进行逐个替换。

#include <stdio.h>
char * my_strcpy(char* dest,const char*sou)
{
  char * ret = dest;
  while(*dest++ = *sou++);
  return ret;
}

int main()
{
  char a[20] = "xxxxxxxxxxxx";
  char b[] = "hello world!";
  printf("%s\n",my_strcpy(a,b))
  return 0;
}

以上代码的关键在于交换a与b的字符时,何时停止。显然是在被复制的b字符串的'\0'时停止。

上面的while(* dest++ = *sou++);很巧妙的解决了这个问题。sou指向的字符不断的赋值给dest指向的位置,然后二者自加,当sou指向'\0'时,此时*dest = *sou表达式的结果就是'\0'的ASCLL值,恰好为零。while判断为假。

space(空格) --- '\0'。

注意:a字符串数组的空间必须足够大,足够容纳b字符串的全部内容。

二·strcat(字符接续函数)

参数如下:

效果如下:

模拟如下:

#include <stdio.h>
char* my_strcat(char *dest,const char * sou)
{
  char * ret = dest;
  while(*dest != '\0')
  dest++;
  while(*dest++ = *sou++);
  return ret;
}
int main()
{
  char a[20] = "hello ";
  char b[] = "whold!";
  printf("%s\n",my_strcat(a,b));
  return 0;
}

说明如下:

1.首先找到a数组的'\0'位置,这是字符插入位置。

2.替换(其本质与strcpy一样)

三·strcmp(字符比较函数)

参数如下:

效果如下:

模拟如下:

int my_strcmp(const char*p1,const char*p2)
{
	while (*p1 == *p2)
	{
		if (*p1 == '\0')
			return 0;
		p1++;
		p2++;
	}
	if (*p1 > *p2)
		return 1;
	else
		return -1;
}

int main()
{
	char a[] = "abcd";
	char b[] = "abq";
	//printf("%d\n", strcmp(a, b));
	printf("%d\n", my_strcmp(a, b));
	return 0;
}

说明如下:

1·字符串之间的比较其实比较Ascll值之间的比较,而不是字符数量之间的比较。

2.当前面的字符相等时就自动向后再拿一对进行比较。

四·小结言

小编后续会将字符串相关的函数都罗列一遍,以及字符相关函数。初学C语言,如果有哪里写的不好的地方,欢迎在评论区指点,如果认为小编写的还不错的,可以留下你们点赞 ,收藏和关注,这是对小编极大的认可也是小编继续走下去的动力。谢谢大家!

  • 13
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值