首先,模拟实现strlen函数
第一种方法:计数器法
#define _CRT_SRCURE_NO_WARNINGS 1
#include<stdio.h>
int my_strlen(char*str)
{
int count = 0;
while (*str++)
{
count++;
}
return count;
}
int main()
{
char arr = "hello";
int len = my_strlen(arr);
printf("%d", len);
return 0;
}
第一个很简单。
第二种方法:递归
#define _CRT_SRCURE_NO_WARNINGS 1
#include<stdio.h>
int my_strlen(char*str)
{
if (*str=='\0')
{
return 0;
}
else
{
return 1 + my_strlen(str + 1);
}
}
int main()
{
char arr[] = "hello";
int len = my_strlen(arr);
printf("%d", len);
return 0;
}
第三种方法:指针的方法
#include<stdio.h>
int my_strlen(char*str)
{
char*p = str;
while (*p!='\0')
{
p++;
}
return p - str;
}
int main()
{
char arr[] = "hello";
int len = my_strlen(arr);
printf("%d", len);
return 0;
}
最规范的书写方式
我们先看库函数strlen的结构
size_t strlen ( const char * str );
返回值类型是size_t,是无符号整型的意思。参数是const char*,也就是被const修饰的字符类型指针,const修饰的作用是使对应的指针无法改变。
#include<stdio.h>
#include<string.h>
size_t my_strlen(const char*str)
{
int count = 0;
while (*str)
{
str++;
count++;
}
return count;
}
int main()
{
char arr[] = "hello";
size_t len = my_strlen(arr);
printf("%d", len);
return 0;
}
这种方法也是计数器的方法,不过更加规范。
接下来,我们来模拟实现一下strcpy函数,也就是字符串拷贝
#include<stdio.h>
#include<string.h>
#include<assert.h>
char* my_strcpy(char*dest, const char*str)
{
assert(dest&&str);
char*p = str;
while (*dest++ = *str++)
{
;
}
return p;
}
int main()
{
char arr1[20] = "abcdef";
char arr2[20] = { 0 };
my_strcpy(arr2, arr1);
printf("%s\n", arr2);
return 0;
}
接下来,我们来模拟实现一下strcat
#include<stdio.h>
#include<assert.h>
char*my_strcat(char*dest, const char*src)
{
assert(dest&&src);
char*p = dest;
while (*dest != '\0')
{
dest++;
}
while (*dest++ = *src++)
{
;
}
return p;
}
int main()
{
char arr[20] = "hello";
my_strcat(arr, "world");
printf("%s", arr);
return 0;
}
分为两部分:第一个while循环,使达到dest指向\0处
第二个while循环 :字符串拷贝