5.字符串中几个重要的内容(未完)
5.1.C风格字符串的几个函数原型strlen,strcomp,strcat,strcpy
4 #include<string>
5 #include<cassert>
6 using namespace std;
7 //strlen
8 size_t str_len(const char *ptr) {
9 assert(ptr != NULL);
10 size_t cnt = 0;
11 while (*ptr++ != '\0')
12 cnt++;
13 return cnt;
14 }
15 //strcomp
16 int str_comp(const char *ptr_1, const char * ptr_2) {
17 assert(ptr_1 != NULL && ptr_2 != NULL);
18 while (*ptr_1 == *ptr_2) {
19 if (*ptr_1 == '\0')
20 return 0;
21 ++ptr_1;
22 ++ptr_2;
23 }
24 return *ptr_1 - *ptr_2;
25 }
26 //strcat
27 //切记,使用str_cat的时候一定要让第一个传进来的字符串数组有足够大的空间,否则会出错!
28 char * str_cat(char * ptr_3, const char * ptr_4) {
29 char *temp = ptr_3;
30 assert((ptr_3 != NULL) && (ptr_4 != NULL));
31 while (*ptr_3 != '\0') {
32 ptr_3++;
33 }
34 while ((*ptr_3++ = *ptr_4++) != '\0');
35
36 return temp;
37 }
38 //strcpy
39 //两个字符组数复制的时候应该具有同样的大小!
40 char * str_cpy(char * ptr_5, const char * ptr_6) {
41 assert((ptr_5 != NULL) && (ptr_6 != NULL));
42 while ((*ptr_5++ = *ptr_6++) != '\0');
43 return ptr_5;
44 }
45
46 //memcpy
47 void *memcpy(char *dest, const char *src, size_t n) {
48 assert((dest != NULL) && (src != NULL));
49 while (n != 0) {
50 *dest++ = *src;
51 n--;
52 }
53 return dest;
54 }
55
56 //memmove 解决mencpy由于源内存和目标内存可能重叠的问题
57 //低内存地址(源内存) low————>high(目标内存)高内存地址 正向复制即可
58 //低内存地址(目标内存) low————>high(源内存)高内存地址 正向复制可能导致地址重叠,解决办法:反向复制!
59 //源内存=目标内存(起始值),不必复制!
60 void *memmove(char *dest, const char *src, size_t n) {
61 assert((dest != NULL) && (src != NULL));
62 if (dest < src || src + n <= dest) {
63 while (n != 0) {
64 *dest++ = *src;
65 n--;
66 }
67 }
78 else{
79 dest= dest + n - 1;
80 src = src + n - 1;
81 while (n--) {
82 *dest-- = *src--;
83 }
84 }
85 //return dest;
86 }
87 int main() {
88 char t[4];
89 char p[50] = { 'a','b','c','\0' };
90 char p_1[] = { 'a','b','c','\0' };
91 char p_2[] = { 'a','b','c','d','\0' };
92 char p_3[] = { 'b','b','c','\0' };
93 cout << "p's length is:" << str_len(p) << endl;
94 if (str_comp(p_1, p_2) < 0)
95 cout << "p_2>p_1" << endl;
96 if (str_comp(p_1, p_3) < 0)
97 cout << "p_3>p_1" << endl;
98 if (str_comp(p, p_1) == 0)
99 cout << "p=p_1" << endl;
100 char *temp = str_cat(p,p_1);
101 while (*temp!='\0')
102 {
103 cout << *temp++;
104 }
105 cout << endl;
106 str_cpy(t, p_1);
107 for (auto x : t) {
108 cout << x;
109 }
110 }

浙公网安备 33010602011771号