引言:以下关于函数的模拟仅仅关于函数的部分效果进行模拟,并不能完全代替库函数。
一·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语言,如果有哪里写的不好的地方,欢迎在评论区指点,如果认为小编写的还不错的,可以留下你们点赞 ,收藏和关注,这是对小编极大的认可也是小编继续走下去的动力。谢谢大家!