废话不多说,直接上代码,能看懂看,看不懂别看了,学习这种事,随缘就好
#include<iostream>
#include<assert.h>
using namespace std;
size_t my_strlen(const char *str)
{
assert(str != NULL);
if(*str == '\0')
return 0;
else
return my_strlen(str+1) + 1;
}
char* my_strcpy(char *strDest, const char *strSrc)
{
char *start = strDest;
assert(strDest != NULL&&strDest != NULL);
char *ptmp_Dest = strDest;
const char *ptmp_Src = strSrc;
while (*ptmp_Src != '\0')
{
*ptmp_Dest++ = *ptmp_Src++;
}
*ptmp_Dest = '\0';
return start;
}
char *my_strncpy(char *dst, const char *src, size_t n)
{
char *start = dst;
assert(dst != NULL&&src != NULL);
while (n--)
{
if (*src == '\0')
{
*dst = '\0';
dst++;
}
else
{
*dst = *src;
dst++;
(char*)src++;
}
}
return start;
}
//str1 > str2 : 1
//str1 == str2 : 0
//str1 < str2 : -1
int my_strcmp(const char *str1, const char *str2)
{
assert(str1!=NULL && str2!=NULL);
if(*str1=='\0' && *str2=='\0')
return 0;
while(*str1!='\0' && *str2!='\0')
{
if(*str1 > *str2)
return 1;
else if(*str1 < *str2)
return -1;
else
{
str1++;
str2++;
}
}
if(*str1=='\0' && *str2!='\0')
return -1;
else if(*str1!='\0' && *str2=='\0')
return 1;
return 0;
}
int my_strncmp(const char *str1, const char *str2, size_t n)
{
assert(str1 != NULL&&str2 != NULL);
while (n && (*str1 == *str2))
{
(char*)str1++;
(char*)str2++;
n--;
}
if (n > 0)
return *str1 - *str2;
return *(str1-1) - *(str2-1);
}
char* my_strcat(char *strDest, const char *strSrc)
{
assert(strDest!=NULL && strSrc!=NULL);
char *ptmp_Dest = strDest;
const char *ptmp_Src = strSrc;
while(*ptmp_Dest != '\0')
++ptmp_Dest;
while(*ptmp_Src != '\0')
*ptmp_Dest++ = *ptmp_Src++;
*ptmp_Dest = '\0';
return strDest;
}
char *my_strncat(char *dst, const char *src, size_t n)
{
char *start = dst;
assert(dst != NULL&&src != NULL);
while (*dst)
dst++;
while (n--)
*dst++ = *(char*)src++;
return start;
}