模拟实现strlen
计数器方法:
#include<assert.h>
size_t my_strlen(const char* str)
{
size_t count = 0;
assert(str);
while (*str != '\0')
{
count++;
str++;
}
return count;
}
因为strlen只是用来求字符串长度而不是改变字符串,因此在参数前面可以加一个const。
指针方法:
size_t my_strlen(const char* str)
{
assert(str);
char* head = str;
while (str)
{
str++;
}
return str - head;
}
递归方法:
size_t my_strlen(const char* str)
{
assert(str);
if (*str != '\0')
{
return 1 + my_strlen(str + 1);
}
else
return 0;
}
模拟实现strcpy
#include<stdio.h>
#include<assert.h>
char* my_strcpy(char* dest,const char*src)
{
assert(dest);
assert(src);
char* ret = dest;
while (*dest++ = *src++)
{
;
}
*dest = *src;
return ret;
}
模拟实现strcat
char* my_strcat(char* dest, char* src)
{
char* ret = dest;
assert(dest);
while (*dest!='\0')
{
dest++;
}
while (*dest++ = *src++)
{
;
}
return ret;
}
第一步先找到字符串的末尾,再追加字符串。
模拟实现strcmp
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);
}
strstr
注意: 查找时要注意以下两种情况:
s1:abcdef ,s2:bcd (一次匹配就找到了)
s1:abbbcdef,s2:bbc(多次匹配才能找到)
char* my_strstr(const char* str1, const char* str2)
{
assert(str1 && str2);
const char* s1 = str1;
const char* s2 = str2;
const 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;
}