模拟实现字符串函数
模拟实现strlen函数
strlen函数作用为计算字符串长度
int my_strlen(const char* str)
{
int count = 0;
assert(str);
while (*str != '\0')
{
str++;
count++;
}
return count;
}
模拟实现strcmp和strncmp函数
模拟strcmp
strcmp函数的作用为比较两组字符串的大小
//str1>str2 返回>0的数
//str1<str2 返回<0的数
//str1=str2 返回=0
int my_strcmp(const char* str1, const char* str2)
{
assert(str1 && str2);
while (*str1 == *str2)
{
if (*str1 == '\0')
return 0;
str1++;
str2++;
}
return (*str1 - *str2);
}
模拟strncmp
strncmp函数在strcmp函数的基础上新增了一个参数,可指定想比较的字符串的长度
//比较字符串大小
//str1>str2 返回>0的数
//str1<str2 返回<0的数
//str1=str2 返回=0
int my_strncmp(const char* str1, const char* str2, size_t num)
{
assert(str1 && str2);
int i = 0;
int count = 0;
while (*str1 == *str2)
{
count++;
if (count <= num)
{
if (count == num)
return 0;
str1++;
str2++;
}
}
return (*str1 - *str2);
}
模拟实现strcpy和strncpy函数
模拟strcpy
strcpy函数的作用为将一个字符串的内容拷贝到另外一个字符串中(覆盖原字符串内容)
char* my_strcpy(char* dest, const char* src)
{
char* p = dest;
assert(dest);
assert(src);
while (*dest++ = *src++);
return p;
}
模拟strncpy
strncpy函数在strcpy函数的基础上新增了一个参数,可指定想拷贝内容的长度,当长度超出拷贝字符串的内容时,自动补上’\0’(覆盖原字符串内容)
//复制字符串(指定长度)
char* my_strncpy(char* dest, const char* src, size_t num)
{
assert(dest);
assert(src);
char* p = dest;
int sz = my_strlen(src);
int i = 0;
if (num <= sz)
{
for (i = 0; i < num; i++)
{
*(dest + i) = *(src + i);
}
}
else
{
for (i = 0; i < sz; i++)
{
*(dest + i) = *(src + i);
}
for (i = sz; i < num; i++)
{
*(dest + i) = '\0';
}
}
return p;
}
模拟实现strcpy和strncpy函数
模拟strcpy
strcpy函数的作用是在原字符串后面追加新的字符串内容,并在末位补上’\0’
//追加字符串
char* my_strcat(char* dest, const char* src)
{
assert(dest && src);
char* p = dest;
while (*dest != '\0')
{
dest++;
}
while (*dest++ = *src++);
return p;
}
模拟strncpy
strncpy函数在strcpy的基础上多了一个参数,可指定追加字符串的长度,当指定长度超出追加字符串长度n时,只追加n的长度,超出部分无效,并在末尾补上’\0’
//追加字符串(指定长度)
char* my_strncat(char* dest, const char* src, size_t num)
{
assert(dest && src);
char* p = dest;
while (*dest != '\0')
{
dest++;
}
int i = 0;
int sz = my_strlen(src);
if (num > sz)
{
for (i = 0; i < sz; i++)
{
*(dest + i) = *(src + i);
}
}
else
{
for (i = 0; i < num; i++)
{
*(dest + i) = *(src + i);
}
}
*(dest + i) = '\0';
return p;
}
模拟实现strstr函数
strstr函数的作用是在一组字符串中寻找子串,满足条件则返回能够匹配子串的起始地址,不满足条件则返回空指针
//模拟实现字符串子串查找
char* my_strstr(const char* str1, const char* str2)
{
assert(str1 && str2);
char* s1 = str1;
char* s2 = str2;
char* p = str1;
while (*p)
{
s1 = p;
s2 = str2;
while (*s1 != '\0' && *s2 != '\0' && *s1 == *s2)
{
s1++;
s2++;
}
if (*s2 == '\0')
{
return p; //子串能够匹配,则返回匹配位置的起始地址
}
p++;
}
return NULL; //不能匹配则返回空指针
}