今天要给大家讲的是库函数的模拟实现,让你拥有自己制作函数的魅力!
库函数的模拟实现
1strlen
法一计数器
size_t my_strlen(char*c)
{
size_t i=0;
while (1)
{
if (c[i] == 0)
break;
i++;
}
return i;
}
int main()
{
char c[] ="snbtwxl";
printf("%zd\n", strlen(c));
printf("%zd", my_strlen(c));
return 0;
}
法二函数递归
size_t my_strlen(char* c)
{
if (*c != 0)
return my_strlen(c + 1) + 1;
else
return 0;
}
int main()
{
char c[] = "snbtwxl";
printf("%zd\n", strlen(c));
printf("%zd", my_strlen(c));
return 0;
}
2strcpy
char* my_strcpy(char* dest, char* src)
{
int i = 0;
char* ret = dest;
while (*dest++ = *src++)
;
return ret;
}
int main()
{
char c[] = "snbtwxl";
char cc[66];
printf("%s\n", strcpy(cc,c));
printf("%s", my_strcpy(cc, c));
return 0;
}
3strcmp
int my_strcmp(char*cc, char*c)
{
while (*cc == *c&&*c!=0)
{
cc++;
c++;
}
return *cc - *c;
}
int main()
{
char c[] = "snbtwxl";
char cc[] = "snbtwxl";
printf("%d\n", strcmp(cc, c));
printf("%d\n", my_strcmp(cc, c));
return 0;
}
4strcat
char* my_strcat(char* c, char* cc);
int main()
{
char c[66] = "wyzzy";
char cc[66] = "zdjsj";
printf("%s\n", strcat(c, cc));
printf("%s", my_strcat(c, cc));
return 0;
}
char* my_strcat(char* c, char* cc)
{
char* ret = c;
while (*(++c));
while (*c = *cc)
{
c++;
cc++;
}
return ret;
}
5strstr
char* my_strstr(const char* str1, const char* str2)
{
assert(str1 && str2);
const char* s1 = NULL;
const char* s2 = NULL;
const char* cur = str1;
while (*cur)
{
s2 = str2;
s1 = cur;
while (*s1== *s2 && *s1&& *s2)
{
s1++;
s2++;
}
if (*s2 == 0)
return cur;
else if (*s1 == 0)
return NULL;
else
cur++;
}
return NULL;
}
int main()
{
char* str1 = "asdfgiantsv5";
char* str2 = "giants";
printf("%s\n%s", strstr(str1, str2), my_strstr(str1, str2));
return 0;
}
今天就到这里了,您的支持就是我创作的最大动力!!!