strlen 函数的参数
size_t strlen ( const char * str );
代码实现:
方法一
以计数的方式计算
int my_strlen(char* str)
{
int count = 0;
while (*str)
{
str++;
count++;
}
return count;
}
int main()
{
char arr[] = { "abcdef" };
int ret = my_strlen(arr);
printf("%d\n", ret);
return 0;
}
方法二
不能创建临时变量
以函数递归的方式计算
int my_strlen(char* str)
{
if (*str == 0)
return 0;
else
return 1 + my_strlen(str+1);
}
int main()
{
char arr[] = { "abcdef" };
int ret = my_strlen(arr);
printf("%d\n", ret);
return 0;
}
方法三
以指针 - 指针的方式计算
int my_strlen(char* str)
{
char* q = str;
while (*q)
{
q++;
}
return q - str;
}
int main()
{
char arr[] = { "abcdef" };
int ret = my_strlen(arr);
printf("%d\n", ret);
return 0;
}
strcpy 函数的参数
char* strcpy(char * destination, const char * source );
目标空间,第二个参数是拷贝的内容代码实现:
#include<assert.h>
char* my_strcpy(char* arr, const char* str)
{
char* s = str;
assert(arr);
assert(str);
while (*arr++ = *str++)
{
;
}
return s;
}
int main()
{
char arr[] = { "#####################" };
char str[] = { "hello china!" };
printf("%s\n", my_strcpy(arr, str));
return 0;
}
函数的参数
char * strcat ( char * destination, const char * source );
代码实现:
char* my_strcat(char* arr, char* str)
{
char* s = arr;
assert(arr && str);
while (*arr)
{
arr++;
}
while (*arr++ = *str++)
{
;
}
return s;
}
int main()
{
char arr[15] = { "hello " };
char str[] = { "china!" };
my_strcat(arr, str);
printf("%s\n", arr);
}
strcmp 函数的参数
int strcmp ( const char * str1, const char * str2 );
代码实现:
int my_strcmp(const char* arr, const char* str)
{
assert(arr && str);
while (*arr == *str && *str)
{
if (*arr == '\0')
{
return 0;
}
arr++;
str++;
}
return *arr - *str;
}
int main()
{
char arr[] = { "abcde" };
char str[] = { "abd" };
int ret = my_strcmp(arr, str);
if (ret > 0)
printf("arr > str");
else if (ret < 0)
printf("arr < str");
else
printf("arr == str");
}
strncpy 函数的参数
char * strncpy ( char * destination, const char * source, size_t num );
代码实现:
char* my_strncpy(char* arr, const char* str, size_t num)
{
assert(arr && str);
char* s = str;
while (num--)
{
*arr++ = *str++;
}
*arr++ = '\0';
return s;
}
int main()
{
char arr[] = { "#####################" };
char str[] = { "hello china!####" };
my_strncpy(arr, str, 5);
printf("%s\n",arr);
return 0;
}
strncat 函数参数
char * strncat ( char * destination, const char * source, size_t num );
代码实现:
char* my_strncat(char* arr, char* str, size_t num)
{
assert(arr && str);
char* s = arr;
while (*arr++)
{
;
}
//寻找到 *arr 为 '\0' 又进行了一次 ++
//所以这里需要 -- 找到 '\0' 真正位置
arr--;
while (num--)
{
*arr++ = *str++;
}
*arr++ = '\0';
return s;
}
int main()
{
char arr[20] = { "hello " };
char str[] = { "china! For a dettet tomorrow!" };
my_strncat(arr, str, 6);
printf("%s\n", arr);
return 0;
}
strncmp 函数参数
int strncmp ( const char * str1, const char * str2, size_t num );
代码实现:
int my_strncmp(char* arr, char* str, size_t num)
{
while (num-- && (*arr - *str == 0) && *str)
{
arr++;
str++;
}
if (*arr > *str)
return 1;
else if (*arr < *str)
return -1;
else
return 0;
}
int main()
{
char arr[10] = { "abcde" };
char str[10] = { "abyaa" };
int ret = my_strncmp(arr, str, 3);
if (ret > 0)
printf("arr > str");
else if (ret < 0)
printf("arr < str");
else
printf("arr == str");
return 0;
}
strstr 函数参数
char * strstr ( const char *str1, const char * str2);
代码实现:
char* my_strstr(const char* arr, const char* str)
{
char* xp = arr;
char* s1 = 0;
char* s2 = 0;
while (*xp)//如果 *xp 为0了,证明 arr 中 不包含 str
{
s1 = xp;
s2 = str;
while (*s1 && *s2 && ( *s1 - *s2 == 0))//只有 *s1 *s2 且 *s1 *s2 相等时才进行查找
{
s1++;
s2++;
}
if (*s2 == '\0')
return xp;
xp++;//如果 s2 没有找完,那么 xp 进入下一个位置继续查找
}
return NULL;
}
int main()
{
char arr[] = { "abcdefg" };
char str[] = { "cdb" };
printf("%s\n", my_strstr(arr, str));
}