介绍
本文主要是借鉴#include<string.h>头文件中strcmp()函数,strcpy()函数,strcat()函数进行仿写。实现字符串对比,字符串拷贝,字符串链接。
文中有strcmp()函数的内核代码,都详细注释了。
PS:(如果有不懂别问我了,估计我也忘了。自行理解,顶多俩小时就能理清楚顺序)。
源码
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
//自己写的代码
int My_Strcmp(const char *str1, const char *str2)
{
/**************************************************************************
(*str1) && (*str1 == *str2)代码解释:
1、(*str1)是为了判断字符串是否结束,因为字符串最后一位是'\0'在ASCII码中是0
2、(*str1 == *str2)判断两个字符ASCII码是否相同,相同为 1,不相同为 0
3、&&(and)解释:在while中只要上面两个任意条件为0则结束循环
***************************************************************************/
//判断字符串是否全部相同如果不相同则退出
while ((*str1) && (*str1 == *str2))
{
str1++;//此处是指针++,读取单个字符。相当于数组arr[i+1],
str2++;
}
//获取到str1 and str2记录最后一个字符在ASCII码中的数字进行对比
if (*str1 > *str2)
return 1;
else if (*str1 < *str2)
return -1;
else
return 0;
}
//#include<string.h>中内核代码
int My_Strcmp_2(const char *str1, const char *str2)
{
unsigned char c1, c2;
while (1) {
c1 = *str1++;//将*str1中字符的ASCII码值赋值到c1
c2 = *str2++;//将*str2中字符的ASCII码值赋值到c2
if (c1 != c2)//当c1不等于c2时判断为真
{
return c1 < c2 ? -1 : 1;//三目运算符判断c1 and c2大小
}
if (!c1)//当c1=0时判断为真,并且跳出循环
{
break;
}
}
return 0;
}
//Strcpy()数组拷贝
char My_Strcpy(char *str1, char *str2)
{
//判断数组是否为空
if (str1 == NULL || str2 == NULL)
return NULL;
//copy *str2 到 *str1,采用单字符逐个拷贝
while ((*str1++ = *str2++) != '\0');
//返回一个数组地址
return *str1;
}
//Strcat()数组链接
char My_Strcat(char *str1,char *str2)
{
//判断数组是否为空
if (str1 == NULL || str2 == NULL)
return NULL;
//第一步:先遍历str1到末尾
while (*str1 != '\0')*str1++;
//方法一:
//第二步:将str2中的字符逐个拷贝到str1
while ((*str1++ = *str2++) != '\0');
//方法二:调用数组拷贝
//My_Strcpy(str1, str2);
//第三步:返回str1一个数组地址
return *str1;
}
void main()
{
char arr[] = "Hella", brr[] = "Hella";//定义字符串
char drr[40] = "world";
//字符串对比
int x = My_Strcmp(arr, brr);
int s = My_Strcmp_2(arr, brr);
printf("反馈结果%d %d\n", s,x);
//字符串拷贝
//PS:拷贝时,drr数组大小不能超过arr数组所定义的大小
My_Strcpy(arr, drr);
printf("反馈结果%s\n", arr);
//字符串链接
My_Strcat(drr, brr);
printf("反馈结果%s\n", drr);
system("pause");
}
运行结果

本文介绍了作者仿照C标准库中的strcmp(),strcpy(),strcat()函数,自定义实现的字符串比较、拷贝和链接功能,包括内核代码的详细注释。
9880

被折叠的 条评论
为什么被折叠?



