目录
1、strlen
size_t strlen ( const char * str );
- strlen函数求得是字符串中’\0’前面所有的字符个数(注意不含’\0’)
- 注意函数的返回值是无符号的,所以两个strlen函数相加减都是大于等于0的
模拟实现
//模拟实现strlen
int my_strlen_1(const char* arr)//1、计数法
{
//遇到'\0'之前所有元素个数和
int n = 0;
while (*arr != '\0')
{
n++;
arr++;
}
return n;
}
int my_strlen_2(const char* arr)//2、指针-指针法
{
//遇到'\0'之前所有元素个数和
char* str = arr;
while (*str != '\0')
{
str++;
}
return str-arr;
}
int my_strlen_3(const char* arr)//3、递归法
{
//遇到'\0'之前所有元素个数和
if (*arr != '\0')
{
return my_strlen_3(arr + 1) + 1;
}
return 0;
}
int main()
{
char arr[] = "abcdefghj";
//int sz = my_strlen_1(arr);
//int sz = my_strlen_2(arr);
int sz = my_strlen_3(arr);
printf("%d\n", sz);
return 0;
}
2、strcpy
char strcpy(char * destination, const char * source );*
- 源字符串必须要以’\0’结束
- strcpy函数会将源字符串中的’\0’拷贝到目标空间
- 目标空间必须要确保足够大
- 目标空间要确保可以改变
模拟实现
//模拟实现strcpy
void my_strcpy(char* arr, const char* str)
{
//int n = strlen(str) + 1;
//while (n > 0)
//{
// *arr = *str;
// arr++;
// str++;
// n--;
//}
while (*arr++ = *str++)
;
}
int main()
{
char arr[20];
my_strcpy(arr, "abcdef");
printf("%s\n", arr);
return 0;
}
3、strcat
char * strcat ( char * destination, const char * source );
- 源字符串必须以’\0’结束
- 目标空间必须要确保足够大
- 目标空间要确保可以改变
模拟实现
//模拟实现strcat
void my_strcat(char* arr, const char* str)
{
arr += strlen(arr);
while (*arr++ = *str