1.strcpy实现字符串的拷贝
char* my_strcpy(char* dest,const char* src)
{
char* temp = dest;
assert(src != NULL);
while(*dest++ = *src++)
{
;
}
return temp;
}
2.strcat实现字符串的连接
char* my_strcat(char* arr,const char* src)
{
char* temp = arr;
assert(src != NULL);
while(*arr != '\0')
{
arr++;
}
while(*arr++ = *src++)
{
;
}
return temp;
}
3.strstr实现子字符串在目标字符串中的查找
char* my_strstr(const char* dest,const char* src)//函数返回找到目标开始匹配且成功的起始位置
{
const char* s1 = dest;//定义s1让dest备份
const char* s2 = src;
const char* ptr = dest;
assert(src != NULL);
while(*ptr)//ptr++寻找开始匹配的位置
{
s1 = ptr;//记住开始匹配的位置
s2 = src;//记住子字符串开始的位置
while(*s1 && *s2 && *s1 == *s2)//有一个条件为假结束
{
s1++;
s2++;
}
if(*s2 == '\0')//当s2说明匹配成功 返回目标字符串的开始位置
return (char*)ptr;
ptr++;//假设开始匹配却未匹配成功*ptr没有成为'\0'时,ptr加加开始下一轮查找
}
return NULL;//没有找到时返回空指针
}
4.strcmp实现字符串的比较
int my_strcmp(const char* dest,const char* src)
{
assert(dest != NULL);//判断传过来的指针是不是为空
assert(src != NULL);
while(*dest == *src)//当src为'\0'时结束,但他的值赋给了dest,
//所以在循环内部返回0;然后跳出循环
{
if(*dest == '\0')
{
return 0;
}
dest++;src++;
}
if(*dest < *src)
{
return -1;
}
else
{
return 1;
}
}
5.memcpy(也同时实现了memmove)内存的字符拷贝
void* my_memcpy(void* dest,const void* src,int count)
{
void* temp = dest;
assert(dest != NULL);
assert(src != NULL);
while(count--)
{
if(src > dest)
{
*((char*)dest) = *((char*)src);
((char*)dest)++;
((char*)src)++;
}
else
{
*((char*)dest+count) = *((char*)src+count);
}
}
return temp;
}
6.strchr在目标字符串中查找字符
char* my_strchr(const char* dest,const char* src)
{
while(*dest)
{
if(*dest == *src)
return dest;
dest++;
}
return NULL;
}
7.strncpy自己定义要拷贝的字符串长度
char* my_strncpy(char* dest,const char* src,int count)
{
char* ret = dest;
assert(src != NULL);
while(count--)//count来控制循环次数
{
*dest++ = *src++;
}
*dest = '\0';//当赋值结束时应当让目标字符串以‘\0’结束
return ret;
}
8.strncmp自己定义需要比较的字符串长度
int my_strncmp(const char* dest,const char* src,int count)
{
assert(dest != NULL);
assert(src != NULL);
while((*dest == *src) && --count)//必须同时满足俩个条件时才满足
{
if(*dest == '\0')//如果*dest为0,说明*src已经结束返回0
return 0;
dest++;
src++;
}
return *src-*dest;//直接返回比较结果数字
}
9.strncat自己定义需要连接字符串的长度
char* my_strncat(char* dest,const char* src,int count)
{
char* ret = dest;//保存dest的起始位置
if(count < 0)
return NULL;//判断假如count输入为负数时
assert(src != NULL);
while(*dest != '\0')
{
dest++;
}
while(count--)
{
*dest++ = *src++;
}
*dest = '\0';//当赋值结束时应当让目标字符串以‘\0’结束
return ret;
}