- strlen 计算字符串大小
// 计数器方法
int my_strlen(const char * str)
{
int count = 0;
while(*str)
{
count++;
str++;
}
return count;
}
//不创建临时变量
int my_strlen(const char * str)
{
if(*str == '\0')
return 0;
else
return 1+my_strlen(str+1);
}
//指针-指针的方式
int my_strlen(char *s)
{
char *p = s;
while(*p !='\0')
p++;
return p-s;
}
- strcpy 从src地址开始且含有'\0'结束符的字符串复制到以dst开始的地址空间,返回值的类型为char*。
char *my_strcpy(char *dest, const char*src)
{
char *ret = dest;
assert(dest != NULL);
assert(src != NULL);
while((*dest++ = *src++))
;
return ret;
}
- strcat 将两个字符连接起来
char *my_strcat(char *dest, const char *src)
{
char *ret=dest;
assert(dest);
assert(src);
while(*dest)
{
dest++;
}
while((*dest++ = *src++))
{
;
}
return ret;
}
- strstr 判断str2是否是str1的子串, 如果是,则该函数返回str2在str1中首次出现的地址;否则,返回NULL。
char *my_strstr(const char* str1, const char* str2)
{
assert(str1);
assert(str2);
char *cp=(char *)str1;
char *substr=(char *)str2;
if(*str2=='/0')
return NULL;
while(*cp)
{
s1=cp;
substr=str2;
while(*s1&&*substr&&(*s1==*substr))
{
s1++;
substr++;
}
if(*substr=='\0')
return cp;
cp++;
}
}
- strcmp 比较字符串的大小 若str1==str2,则返回零;若str1<str2,则返回负数;若str1>str2,则返回正数。
int my_strcmp(const char * src, const char * dst)
{
int ret=0;
while(!(ret=*(unsighed char *)src-*(unsigned char *)dst)&&*dst)
src++,dst++;
if(ret<0)
ret=-1;
else if(ret>0)
ret=1;
return ret;
}
- memcpy 内存拷贝 函数的功能是从源src所指的内存地址的起始位置开始拷贝n个字节到目标dst所指的内存地址的起始位置中。void * ( 无类型指针, 可以接受任何类型 ) size_t ( 字节数 )
void * my_memcpy(void * dst, const void *src, size_t count)
{
void * ret=dst;
while(count--) {
//定义字符型,一个字节一个字节进行拷贝
*(char *)dst=*(char *)src;
dst=(char *)dst+1;
src=(char *)src+1;
}
return ret;
}
- memmove 用于从src拷贝count个字节到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。
void * my_memmove(void *dst, const void *src, size_t count)
{
void * ret=dst;
//如果目标区域与源区域有重叠的部分,从后往前拷贝,
//若没有重叠的部分,从前往后拷贝
if(dst<=src||(char *)dst >=((char *)src+count)){
while(count--){
*(char *)dst=*(char *)src;
dst=(char *)dst+1;
src=(char *)src+1;
}
}
else{
dst=(char *)dst+count-1;
src=(char *)src+count-1;
while(count--){
*(char *)dst=*(char *)src;
dst=(char *)dst-1;
src=(char *)src-1;
}
}
return ret;
}