模拟实现strlen
#include<stdio.h>
unsigned my_strlen(char* arr)
{
int count = 0;
while (*arr)
{
count++;
arr++;
}
return count;
}
int main()
{
char arr[] = "abcde";
int count = my_strlen(arr);
printf("%d",count);
return 0;
}
strlen计算的是字符串’\0‘之前的字符串长度,我们可以通过循环遍历,从而计算出字符串长度。
模拟实现strcpy
void my_strcpy(char *str1,const char *str2)
{
while (*str2)
{
*str1++ = *str2++;
}
}
int main()
{
char arr[] = "abcde";
char arr1[] = "cde";
my_strcpy(arr,arr1);
printf("%s",arr);
return 0;
}
strcpy是将str2的内存拷贝到str1中,并且str1要保证有足够的空间接收str2。
模拟实现strcat
char* my_strcat(char* arr1, char* arr2)
{
assert(arr1);
assert(arr2);
char* tmp = arr1;
while (*arr1)
{
arr1++;
}
while (*arr2)
{
*arr1 = *arr2;
arr1++;
arr2++;
}
return tmp;
}
int main()
{
char arr[10] = "abcde";
char arr1[] = "cde";
printf("%s", my_strcat(arr, arr1));
return 0;
}
strcat是将arr2字符串添加到arr1字符串之后,并且str1要保证有足够的空间。
模拟实现strstr
char* my_strstr(const char* arr1, const char* arr2)
{
assert(arr1 && arr2);
char* cp = arr1;//记录起始地点
char* p1 = 0;
char* p2 = 0;
//遍历arr1和arr2
if (*arr2 == '\0')
{
return arr1;
}
while (*cp)
{
p1 = cp;
p2 = arr2;
while (*p1 && *p2 && *p1 == *p2)
{
p1++;
p2++;
}
if (*p2 == '\0')
{
return cp;
}
cp++;
}
return NULL;
}
strstr是在str1中找到与str2完全相符的返回其地址,如果没找到就返回NULL。