strcpy strcat strcmp 函数的头文件都是 #include <string.h>
strcpy 函数的使用与模拟实现
strcpy 函数的作用是把含有 ‘\0’ 结束符的字符串复制到另一个地址空间。
strcpy 的函数形式 char * strcpy ( char * destination, const char * source )。
strcpy 函数的举例应用:
#include<stdio.h>
#include<string.h>
int main()
{
char arr1[] = "abcdef ";
char arr2[20] = { 0 };
strcpy(arr2, arr1);
printf("%s",arr2);
return 0;
}
得到的结果是把 arr1 中的字符串拷贝到 arr2 中,所以打印出来的结果是:abcdef
strcpy 函数的简单模拟实现
strcpy 函数的拷贝过程可以看作是需要拷贝的字符数组中 ‘\0’ 之前的每一个字符一个一个的拷贝到另一个字符数组中
所以我们可以用 while 循环来实现,每走一步地址加一,在进行解应用赋值,直到走到 '\0' 循环结束。但最后的 '\0' 也应拷贝进去
模拟代码实现:
#include<stdio.h>
char* my_strcpy(char* p1, const char* p2)
{
while (*p2 != '\0')
{
*p1 = *p2;
p1++;
p2++;
}
*p1 = *p2;
}
int main()
{
char arr1[] = "abcdefefef";
char arr2[20] = { 0 };
my_strcpy(arr2,arr1);
printf("%s", arr2);
return 0;
}
strcat 函数的使用与模拟实现
strcat 函数的作用是把两个字符数组进行拼接
strcat 函数的形式是 char * strcat ( char * destination, const char * source )
strcat 函数的举例应用:
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[20] = "hello ";
char arr2[] = "world";
strcat(arr1, arr2);
printf("%s", arr1);
return 0;
}
是把 arr2 拼接到 arr1 的后面,打印出来的结果是:hello world
strcat 函数的简单模拟实现
strcat 函数的拼接过程可以看成是先找到前一个字符数组的 '\0' 然后再把第二个数组拷贝上去。
找到 '\0' 后,可以用 strcpy 的模拟实现来进行传值。
模拟代码实现:
#include <stdio.h>
char* my_strcat(char* p1, const char* p2)
{
char* p = p1;
while (*p1 != '\0')
{
p1++;
}
while (*p2 != '\0')
{
*p1 = *p2;
p2++;
p1++;
}
return p;
}
int main()
{
char arr1[20] = "hell0 ";
char arr2[] = "world and me";
my_strcat(arr1, arr2);
printf("%s",arr1);
return 0;
}
strcmp 函数的使用与模拟实现
strcmp 函数的作用是比较字符串大小,按照 ASCII 码值一个一个比较,若 arr1 > arr2 返回 1,若 arr1 < arr2 返回 -1 , 若 arr1 = arr2 返回 0 。
strcmp 的形式是 int strcmp ( const char * str1, const char * str2 )
strcmp 函数的举例应用:
#include <stdio.h>
#include <string.h>
int main()
{
char arr1[] = "abced";
char arr2[] = "abcde";
int ret = strcmp(arr1, arr2);
printf("%d", ret);
return 0;
}
前三个字符 abc 的 ASCII 值是相同的,第四个字符 arr1 是 e ,arr2 是 c 所以 arr1 大于 arr2 ,返回结果是个大于零的数。
strcmp 函数的模拟实现
strcmp 函数可以看成两个字符数组往后查找,再进行对比相应的 ASCII 值,若 arr1 > arr2 返回 1,若 arr1 < arr2 返回 -1 , 若 arr1 = arr2 返回 0 。
当两个都找到 '\0' 时,返回 0 ,未找到 '\0' 之前,哪个字符数组的 ASCII 码值大,哪个数组就大。
模拟代码实现:
#include <stdio.h>
int my_strcmp(const char* p1, const char* p2)
{
while (*p1 == *p2)
{
if (*p1 == '\0')
{
return 0;
}
p1++;
p2++;
}
if (*p1 < *p2)
{
return -1;
}
if (*p1 > *p2)
{
return 1;
}
}
int main()
{
char arr1[] = "abcdef";
char arr2[] = "acdefb";
int ret = my_strcmp(arr1, arr2);
printf("%d", ret);
return 0;
}