我是靠谱客的博主 舒心发箍,这篇文章主要介绍strcpy,strcat,strstr,strcmp,memmove的实现,现在分享给大家,希望可以做个参考。

1.实现strcpy

把从src地址开始且含有''结束符的字符串复制到以dest开始的地址空间


复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <stdio.h> #include <Windows.h> #include <assert.h> char* my_strcpy(char* dest, const char* src) { assert(dest != NULL); assert(src != NULL); char* start = dest; while (*dest = *src) { dest++; src++; } return start; } int main() { char arr1[] = "hello"; char arr2[] = "world"; my_strcpy(arr1, arr2); printf("%sn", arr1); system("pause"); return 0; }


2.strcat

用于连接两个字符串


复制代码
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
#include <stdio.h> #include <assert.h> #include <Windows.h> char* my_strcat(char* dest, const char* src) { assert(dest); assert(src); char* temp = dest; while (*dest) dest++; while (*dest++ = *src++) { ; } return temp; } int main() { char arr1[] = "hello "; char arr2[] = "world"; my_strcat(arr1, arr2); printf("%s", arr1); system("pause"); return 0; }


3.strstr

strstr(dest,src) 函数用于判断字符串src是否是dest的子串。如果是,则该函数返回src在dest中首次出现的地址;否则,返回NULL。


复制代码
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
#include <stdio.h> #include <Windows.h> #include <assert.h> char* my_strstr(const char* dest, const char* src) { assert(dest); assert(src); const char* cur = dest; while (*cur) { const char* s1 = cur; const char* s2 = src; while ((*s1) && (*s2) && (*s1 == *s2)) { s1++; s2++; } if (*s2 == '') { return (char*)cur; } cur++; } return NULL; } int main() { char arr1[] = "hello "; char arr2[] = "world"; char* ret = my_strstr(arr1, "l"); if (ret == NULL) { printf("non"); } else { printf("%sn", ret); } system("pause"); return 0; }

4.strcmp

strcmp用于比较两个字符串s1和s2,若s1>s2,返回1; s1==s2,返回0;若s1<s2,返回-1;


复制代码
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
#include <stdio.h> #include <Windows.h> #include <assert.h> int my_strcmp(const char*s1, const char* s2) { assert(s1); assert(s2); while (*s1 == *s2) { if (*s1 == '') return 0; s1++; s2++; } if (*s1 > *s2) return 1; else return -1; } int main() { char arr1[] = "hello "; char arr2[] = "world"; int ret = my_strcmp(arr1, arr2); printf("%dn", ret); system("pause"); return 0; }

5.memmove

memmove用于从src拷贝count个字节到dest,如果目标区域和源区域有重叠的话,memmove能够保证源串在被覆盖之前将重叠区域的字节拷贝到目标区域中。但复制后src内容会被更改。但是当目标区域与源区域没有重叠则和memcpy函数功能相同。


复制代码
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
#include <stdio.h> #include <Windows.h> #include <assert.h> void* my_memmove(const void* dest, const void* src,int count) { assert(dest); assert(src); char* cur = (char*)dest; while (*cur) { char* pdest = (char*)dest; char* psrc = (char*)src; if ((pdest > psrc) && (pdest < psrc + count)) { while (count--) *(pdest+count) = *(psrc+count); } else { while (count--) { *pdest = *psrc; } } cur++; } return dest; } int main() { int arr1[20] = { 1,2,3,4,5,6,7,8,9,0 }; int arr2[10] = { 0 }; my_memmove(arr1 + 3, arr1, 20); system("pause"); return 0; }


如发现错误,请及时告知我谢谢~





最后

以上就是舒心发箍最近收集整理的关于strcpy,strcat,strstr,strcmp,memmove的实现的全部内容,更多相关strcpy,strcat,strstr,strcmp,memmove内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(47)

评论列表共有 0 条评论

立即
投稿
返回
顶部