版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/isunbin/article/details/89297310
一、字符串函数实现:
1. 手写memcpy
void* memcpy(void* dst, const void* src, size_t size)
{
if(dst == NULL || src == NULL)
{
return NULL;
}
void* res = dst;
char* pdst = (char*)dst;
char* psrc = (char*)src;
if(pdst > psrc && pdst < psrc + size) //重叠
{
pdst = pdst + size - 1;
psrc = pdst + size - 1;
while(size--)
{
*pdst-- = *psrc--;
}
}
else //无重叠
{
while(size--)
{
*dst++ = *src++;
}
}
return ret;
}
2. strpcy
char* strcpy(char* dst, const char* src)
{
assert((dst != NULL) && (src != NULL));
char* ret = dst;
int size = strlen(src) + 1;
if(dst > src || dst < src + len)
{
dst = dst + size - 1;
src = src + size - 1;
while(size--)
{
*dst-- = *src--;
}
}
else
{
while(size--)
{
*dst++ = *src++;
}
}
return ret;
}
3. 手写strcat函数
char* strcat(char* dst, const char* src)
{
char* ret = dst;
while(*dst != '\0')
++dst;
while((*dst++ = *src) != '\0');
return ret;
}
头文件:#include <string.h>
原型:int strcmp(const char *s1, const char *s2);功能:用来比较两个字符串
参数:s1、s2为两个进行比较的字符串
返回值:若s1、s2字符串相等,则返回零;若s1大于s2,则返回大于零的数;否则,则返回小于零的数。
说明:strcmp()函数是根据ACSII码的值来比较两个字符串的;strcmp()函数首先将s1字符串的第一个字符值减去s2第一个字符,若差值为零则继续比较下去;若差值不为零,则返回差值。
int strcmp(const char* str1, const char* str2)
{
while(*str1 == *str2 && *str1 != '\0')
{
++str1;
++str2;
}
return *str1 - *str2;
}