strlen函数:
功能:获取到\0之前的的字符个数。
代码模拟实现函数:
//strlen
//这里用了递归法,
//如abc,1+bc,然后1+1+c,接着1+1+1,最后读取到\0,1+1+1+0,得到结果3。
size_t my_strlen(const char* str)
{
if (*str == '\0')
return 0;
else
return 1 + my_strlen(str + 1);
}
int main()
{
char arr[] = "abc";
size_t len = my_strlen(arr);
printf("%zd\n", len);
return 0;
}
strcpy函数:
功能:拷贝一个指定的字符串
代码模拟实现函数:
//strcpy
char* my_strcpy(char* dest, char* str)
{
char* ret = dest;
assert(dest && *str);//断言,如果其中有一个为空指针,停止运行,保护程序
while (*dest = *str)
{
dest++;
str++;
}
return ret;
}
int main()
{
char arr1[20] = { 0 };//被拷入数组
char arr2[] = "abcdef";//拷入数组
my_strcpy(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
strcmp函数:
功能:比较两个字符串的对应的ascll码值大小(从左到右对应的ascll码值大小)
代码模拟实现函数:
int my_strcmp(const char* s1, const char* s2)
{
while (*s1 == *s2)
{
if (*s1 == '\0')
return 0;//读取到\0时仍然相等,说明两个字符串完全一样
s1++;
s2++;
}
return *s1 - *s2;
}
int main()
{
int ret = my_strcmp("abcdef", "abc");
if (ret > 0)
printf("大于\n");
else if (ret == 0)
printf("等于\n");
else
printf("小于\n");
return 0;
}
strcat函数:
功能:粘贴两个字符串
代码模拟函数实现:
//strcat
char* my_strcat(char* dest, const char* src)
{
char* ret = dest;
assert(dest && src);//断言
//找到目标空间,也就是第一个字符串的结尾的\0
while (*dest)
{
dest++;
}
//拷贝
while (*dest = *src)
{
dest++;
src++;
}
return ret;
}
int main()
{
char arr1[20] = "hello ";
char arr2[] = "world";
my_strcat(arr1, arr2);
printf("%s\n", arr1);
return 0;
}
strstr函数:
功能:在较长数组1中看是否能找到较短数组2,如果存在,打印数组1中数组2的字符串起始位置到结束
代码模拟函数实现:
//strstr
char* my_strstr(char* str1, char* str2)
{
const char* cur = str1;//记录数组1的起始位置
const char* s1 = NULL;
const char* s2 = NULL;//创建两个空指针,用来模拟数组地址的变化
assert(str1 && str2);//断言
if (*str2 == '\0')
{
return (char*)str1;//str2历遍完全部字符了,且符合条件,记录str1的位置
}
while (*cur)//进入判断条件,建议画图模拟一下,用abbbbcdef和bbc这两个数组能找出所有可能发生的情况
{
s1 = cur;
s2 = str2;
while (*s1 == *s2)
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return (char*)cur;//此时,找到符合位置的地址,返回str1此时历遍到的位置
}
cur++;
}
return NULL;//历遍完全部数组,仍没有找到,说明a数组中不存在符合b数组的字符串
}
int main()
{
char arr1[]="abcdef";
char arr2[] = "bcd";
char* ret = my_strstr(arr1, arr2);
if (ret != NULL)
printf("%s\n", ret);
else
printf("找不到\n");
return 0;
}