1.strcpy()
char *my_strcpy(char *s1, const char *s2)
{
char* p1 = s1;
const char* p2 = s2;
while (*p1++ = *p2++)
{
}
return s1;
}
2.strlen()
unsigned int my_strlen(const char* s)
{
const char* p = s;
while (*p++)
{
}
return p - s - 1;
}
3.strcat()
char* my_strcat(char* s1, const char* s2)
{
char* p1 = s1;
const char* p2 = s2;
unsigned int len = strlen(s1);
p1 += len;
while (*p1++ = *p2++)
{
}
return s1;
}
4.strcmp()
int my_strcmp(const char* s1, const char* s2)
{
const char* p1 = s1;
const char* p2 = s2;
while (*p1 || *p2)
{
if (*p1 - *p2)
{
return *p1 - *p2 > 0 ? 1 : -1;
}
p1++;
p2++;
}
return 0;
}
5.atoi()
int my_atoi(const char* nptr)
{
const char* p = nptr;
int sign = 1;
int num = 0;
while (*p == ' ')
{
p++;
}
sign = (*p == '-') ? -1 : 1;
if (*p == '+' || *p == '-')
{
p++;
}
while (*p >= '0' && *p <= '9')
{
num = num * 10 + *p - '0';
p++;
}
return num*sign;
}
6.itoa()
char* my_itoa(int value, char* str, int base)
{
char* p = str;
int reverse_start = 0;
if (value < 0)
{
reverse_start = 1;
*p++ = '-';
value = -value;
}
else if (value == 0)
{
*p++ = '0';
}
while (value)
{
*p++ = value % base + '0';
value /= base;
}
*p = '\0';
int i, j;
for (i = reverse_start, j = strlen(str) - 1; i < j; i++, j--)
{
char tmp = str[i];
str[i] = str[j];
str[j] = tmp;
}
return str;
}
7.memmove()
void* my_memmove(void* dest, void* src, size_t num)
{
char* psrc = (char*)src;
char* pdest = (char*)dest;
if (pdest <= psrc || pdest > psrc + num)
{
for (size_t i = 0; i < num; i++)
{
*pdest++ = *psrc++;
}
}
else
{
pdest += num;
psrc += num;
for (size_t i = 0; i < num; i++)
{
*(--pdest) = *(--psrc);
}
}
return dest;
}