1.实现strcpy

1
2
3
4
5
6
7
8
9
void *Strcpy(char *des ,char *src)
{
assert(des);
assert(src);
char *tmp = des;
while (*des++ = *src++);
des = tmp;
return des;
}

2.实现strcat

1
2
3
4
5
6
7
8
9
10
void *Strcat(char *des, char *src)
{
assert(des);
assert(src);
char *tmp = des;
while (*des)
des++;
while (*des++ = *src++);
return tmp;
}

3.实现strstr

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
void *Strstr(const char *des, const char *src)
{
assert(des);
assert(src);
char *sub_str = src;
char *red_str = NULL;
char *black_str = des;
while (*black_str)
{
sub_str = src;
red_str = black_str;
while (*sub_str && red_str && (*sub_str == *red_str))
{
sub_str++; red_str++;
}
if (0 == *sub_str)
{
return black_str;
}
black_str++;
}
return NULL;
}

4.实现strchr

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
void *Strchr(const char *src,int c )
{
assert(src);
char *a = src;
while (*a)
{
if (*a == c)
break;
a++;
}
if (*a == '\0')
{
return NULL;
}
return a;
}

5.实现strcmp

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
int Strcmp(const char *str1, const char *str2)
{
assert(str1);
assert(str2);
const char *a = str1;
const char *b = str2;
while (*a && *b)
{
if (*a == *b)
{
a++; b++;
}
else
{
return *a > *b ? 1 : -1;
}
}
if (*a == '\0' && *b == '\0')
return 0;
if ('\0' == *a)
return -1;
else
return 1;
}
//第二种方法
int Strcmp1(const char *str1, const *str2)
{
assert(str1);
assert(str2);
const char *a = str1;
const char *b = str2;
int ret = 0;
while (!(ret = *a - *b) && *a && *b )
{
a++; b++;
}
if (*a == '\0' && *b == '\0')
return 0;
if ('\0' == *a)
return -1;
else
return 1;
if (ret > 0)
return 1;
if (ret < 0)
return -1;
}

6.实现memcpy

1
2
3
4
5
6
7
8
9
10
11
12
13
14
void *Memcpy(void *des, void *src, size_t count)
{
assert(des);
assert(src);
char *a = (char*)des;
char *b = (char*)src;
while (count--)
{
*a = *b;
a++;
b++;
}
return des;
}

7.实现memmove

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
void *my_memmove(void *des, void *src, size_t count)
{
assert(des);
assert(src);
char *a = (char*)des;
char *b = (char*)src;
if (a > b && a <= (b + count))
{
while (count--)
{
*(a + count) = *(b + count);
}
}
else
{
while (count--)
{
*a = *b;
a++;
b++;
}
}
return des;
}

最后更新: 2019年05月27日 15:20

原始链接: http://CQolive.github.io/2019/05/27/String库函数部分实现/

× 请我吃糖~
打赏二维码