1.strcpy-字符串拷贝
函数原型:char* strcpy(char* destination,const char* source);
将source的内容拷贝到destination中
#include<stdio.h>
#include<assert.h>
char* My_strcpy(char* str1, char* str2)//将str2的内容拷贝到str1,包含str2末尾的\0
{
assert(str1 && str2);//如果传入的是空指针,返回错误信息
char* ret = str1;
while (*str1++ = *str2++);
return ret;
}
int main()
{
char arr1[20] = "abcdef";
char arr2[] = "xyz";
printf("%s\n",My_strcpy(arr1, arr2));
return 0;
}
注意:arr1要能够放得下arr2的内容,包含arr2末尾的\0
2.strcat-字符串追加
函数原型:char* strcat(char*destination,const char* source);
在destination后\0处追加source,source第一个字符会覆盖destination末尾的\0
#include<stdio.h>
#include<assert.h>
char* My_strcat(char* str1, const char* str2)//将str2的内容追加到str1后面
{
assert(str1 && str2);
char* ret = str1;
while (*str1)//循环至arr1的末尾\0
{
str1++;
}
while (*str1++ = *str2++);
return ret;
}
int main()
{
char arr1[20] = "Hello ";
char arr2[] = "world";
printf("%s\n", My_strcat(arr1, arr2));
return 0;
}
注意:和模拟实现strcpy一样,模拟实现strcat也要考虑arr1能否放得下arr1和arr2加起来的内容
3.strcmp-字符串比较
函数原型:int strcmp(const char*str1,const char*str2);
这个函数比较的是这两个指针指向字符的阿克斯码
str1>str2 返回大于0的数字
str1=str2 返回等于0的数字
str1<str2 返回小于0的数字
#include<stdio.h>
#include<assert.h>
int My_strcmp(const char* str1, const char* str2)//由于不修改指针指向的内容,因此将指针声明为const类型提高代码健壮性
{
assert(str1 && str2);
while (*str1 == *str2)
{
if (str2 == '\0')
{
return 1;
}
str1++;
str2++;
}
return *str1 - *str2;//str1所指向的字符的阿克斯码大于str2指向的字符计算结果就大于0,否则小于0
}
int main()
{
char arr1[20] = "abcdef";
char arr2[] = "abcxyz";
printf("%d\n", My_strcmp(arr1, arr2));
return 0;
}