strcmp函数
功能
strcmp
函数用于比较两个字符串。会比较两个字符串中的字符,直到找到不同字符或者到字符串的结尾。总结其功能为:
- 如果第一个字符串小于第二个字符串,返回一个<0的数
- 如果两个字符串相等,返回0
- 如果第一个字符串大于第二个字符串,返回一个>0数
模拟实现
int my_strcmp(const char* str1,const char* str2)
{
//首先判断*str1不为空,判断*str1和*str2是否相等,
//之间加一个&&可以确定*str1和*str2都不为空且还能判断*str1和*str2是否相等
while (*str1 && (*str1 == *str2))
{
//每判断一个字母向后走一位
str1++;
str2++;
}
//函数返回值是int,char类型相减是ASII码值,能直接返回
return *(const unsigned char *)str1 - *(const unsigned char *)str2;
}
strstr函数
功能
strstr
函数的功能是:
- 在一个字符串中查找另一个字符串出现
- 在主字符中查找子字符串,找到返回子字符串的第一个字符
- 没有则返回NULL
模拟实现
char* my_strstr(const char* str1,const char* str2)
{
//先判断子字符串是否为空,为空则返回主字符串
if (!*str2)
{
return (char*)str1;
}
//遍历主字符串
for (; *str1; str1++)
{
//临时指针,用于失败回溯
const char* a = str1;
const char* b = str2;
//判断是否为空和子字符串主字符串是否相等
while(*a&&*b && (*a == *b))
{
a++;
b++;
}
//当*b结束返回主字符串
if (!*b)
{
return (char*)str1;
}
}
return nullptr;
}
strncpy函数
功能
strncpy
函数的功能是:
- 在一个字符串中复制num个字符到另外一个字符串中
- num值最大复制长度
模拟实现
char* my_strncpy(char* dest, const char* src, size_t n) {
//临时指针
char* original_dest = dest;
//在n用完之前或者src结尾
while (n > 0 && *src != '\0') {
*dest++ = *src++;
--n;
}
while (n > 0) {
*dest++ = '\0';
--n;
}
return original_dest;
}
strncat函数
功能
strncat
函数的功能是:
- 在一个字符串末尾追加另一个字符串
- n是你指定的最大追加长度
模拟实现
char* my_strncat(char* dest, const char* src, size_t n)
{
char* dest_end = dest;
while (*dest_end != '\0')
{
dest_end++;
}
while (*src != '\0'&&n > 0)
{
*dest_end++ = *src++;
n--;
}
*dest_end = '\0';
return dest;
}
memcpy函数
功能
memcpy
函数的功能是:
- 内存中复制数据块
memcpy
就是用于在内存中复制一个数据块到另一个位置,你可以指定要复制的字节数。
模拟实现
void* my_memcpy(void* dest, const void* src, size_t n)
{
char *d = (char *)dest;
const char *s = (const char *)src;
for (size_t i = 0; i < n; i++) {
d[i] = s[i];
}
return dest;
}