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 }

 

 

 

 

posted @ 2019-06-03 22:45  Royzzzzz  阅读(156)  评论(0)    收藏  举报