019:全面的MyString//待修改

  1 #include <cstdlib>
  2 #include <iostream>
  3 using namespace std;
  4 int strlen(const char * s) 
  5 {    int i = 0;
  6     for(; s[i]; ++i);
  7     return i;
  8 }
  9 void strcpy(char * d,const char * s)
 10 {
 11     int i = 0;
 12     for( i = 0; s[i]; ++i)
 13         d[i] = s[i];
 14     d[i] = 0;
 15         
 16 }
 17 int strcmp(const char * s1,const char * s2)
 18 {
 19     for(int i = 0; s1[i] && s2[i] ; ++i) {
 20         if( s1[i] < s2[i] )
 21             return -1;
 22         else if( s1[i] > s2[i])
 23             return 1;
 24     }
 25     return 0;
 26 }
 27 void strcat(char * d,const char * s)
 28 {
 29     int len = strlen(d);
 30     strcpy(d+len,s);
 31 }
 32 class MyString
 33 {
 34 private:
 35     char* str;
 36 public:
 37     MyString(){
 38         str = new char[1];
 39         str[0] = '\0';
 40     }
 41     
 42     MyString(const char* _str){
 43         str = new char[strlen(_str) + 1];
 44         strcpy(str,_str);
 45     }
 46     
 47     MyString(const MyString& _s){
 48         if(_s.str){
 49             str = new char[strlen(_s.str) + 1];
 50             strcpy(str,_s.str);
 51         }  
 52         else{
 53             str = new char[1];
 54             str[0] = '\0';
 55         }
 56     }
 57     
 58     ~MyString(){if(str) delete []str;}
 59     
 60     friend ostream& operator<<(ostream& o,const MyString& _s){
 61         o << _s.str;
 62         return o;
 63     }
 64     
 65     MyString operator=(const MyString& _s){
 66         if(str == _s.str)
 67           return *this;
 68         delete []str; 
 69         if(_s.str){
 70            str = new char[strlen(_s.str) + 1];
 71            strcpy(str,_s.str);
 72         }
 73         else{
 74            str = new char[1];
 75            str[0] = '\0';
 76         }
 77         return *this;
 78     }
 79     
 80     MyString operator+(const MyString& _s){
 81         char* astr = new char[strlen(str) + strlen(_s.str) + 1];
 82         strcpy(astr,str);
 83         strcat(astr,_s.str);
 84         return MyString(astr);
 85     }
 86     
 87     friend MyString operator+(const char* _str,const MyString _s){
 88         MyString tmp(_str);
 89         tmp = tmp + _s;
 90         return tmp;
 91     }
 92     
 93     char& operator[](int n){
 94         return str[n];
 95     }
 96     
 97     MyString operator+=(char* _str){
 98         *this = *this + MyString(_str);
 99         return *this;
100     }
101     
102     char* operator()(int start,int ll){
103         char *s = new char[ll + 1];
104         for(int i = start;i < start + ll;++ i)
105          s[i - start] = str[i];
106         s[ll] = '\0';
107         return s;
108     }
109     
110     bool operator<(const MyString& _s){
111         if(strcmp(str,_s.str) < 0)
112           return true;
113         return false;
114     }
115     
116     bool operator==(const MyString& _s){
117         if(strcmp(str,_s.str) == 0)
118           return true;
119         return false;
120     }
121     
122     bool operator>(const MyString& _s){
123         if(strcmp(str,_s.str) > 0)
124           return true;
125         return false;
126     }
127 };
128 
129 
130 int CompareString( const void * e1, const void * e2)
131 {
132     MyString * s1 = (MyString * ) e1;
133     MyString * s2 = (MyString * ) e2;
134     if( * s1 < *s2 )
135     return -1;
136     else if( *s1 == *s2)
137     return 0;
138     else if( *s1 > *s2 )
139     return 1;
140 }
141 int main()
142 {
143     MyString s1("abcd-"),s2,s3("efgh-"),s4(s1);
144     MyString SArray[4] = {"big","me","about","take"};
145     cout << "1. " << s1 << s2 << s3<< s4<< endl;
146     s4 = s3;
147     s3 = s1 + s3;
148     cout << "2. " << s1 << endl;
149     cout << "3. " << s2 << endl;
150     cout << "4. " << s3 << endl;
151     cout << "5. " << s4 << endl;
152     cout << "6. " << s1[2] << endl;
153     s2 = s1;
154     s1 = "ijkl-";
155     s1[2] = 'A' ;
156     cout << "7. " << s2 << endl;
157     cout << "8. " << s1 << endl;
158     s1 += "mnop";
159     cout << "9. " << s1 << endl;
160     s4 = "qrst-" + s2;
161     cout << "10. " << s4 << endl;
162     s1 = s2 + s4 + " uvw " + "xyz";
163     cout << "11. " << s1 << endl;
164     qsort(SArray,4,sizeof(MyString),CompareString);
165     for( int i = 0;i < 4;i ++ )
166     cout << SArray[i] << endl;
167     //s1的从下标0开始长度为4的子串
168     cout << s1(0,4) << endl;
169     //s1的从下标5开始长度为10的子串
170     cout << s1(5,10) << endl;
171     return 0;
172 }

 

  1 #include <cstdlib>
  2 #include <iostream>
  3 using namespace std;
  4 int strlen(const char * s) 
  5 {    int i = 0;
  6     for(; s[i]; ++i);
  7     return i;
  8 }
  9 void strcpy(char * d,const char * s)
 10 {
 11     int i = 0;
 12     for( i = 0; s[i]; ++i)
 13         d[i] = s[i];
 14     d[i] = 0;
 15         
 16 }
 17 int strcmp(const char * s1,const char * s2)
 18 {
 19     for(int i = 0; s1[i] && s2[i] ; ++i) {
 20         if( s1[i] < s2[i] )
 21             return -1;
 22         else if( s1[i] > s2[i])
 23             return 1;
 24     }
 25     return 0;
 26 }
 27 void strcat(char * d,const char * s)
 28 {
 29     int len = strlen(d);
 30     strcpy(d+len,s);
 31 }
 32 class MyString
 33 {
 34 private:
 35     char* str;
 36 public:
 37     MyString(){
 38         str = new char[1];
 39         str[0] = '\0';
 40     }
 41     
 42     MyString(const char* _str){
 43         str = new char[strlen(_str) + 1];
 44         strcpy(str,_str);
 45     }
 46     
 47     MyString(const MyString& _s){
 48         /*if(_s.str){
 49             str = new char[strlen(_s.str) + 1];
 50             strcpy(str,_s.str);
 51         }  
 52         else{
 53             str = new char[1];
 54             str[0] = '\0';
 55         }*/
 56         str = new char[strlen(_s.str) + 1];
 57         strcpy(str,_s.str);
 58     }
 59     
 60     ~MyString(){if(str) delete []str;}
 61     
 62     friend ostream& operator<<(ostream& o,const MyString& _s){
 63         o << _s.str;
 64         return o;
 65     }
 66     
 67     MyString operator=(const MyString& _s){
 68         if(str == _s.str)
 69           return *this;
 70         delete []str; 
 71         /*if(_s.str){
 72            str = new char[strlen(_s.str) + 1];
 73            strcpy(str,_s.str);
 74         }
 75         else{
 76            str = new char[1];
 77            str[0] = '\0';
 78         }*/
 79         str = new char[strlen(_s.str) + 1];
 80         strcpy(str,_s.str);
 81         return *this;
 82     }
 83     
 84     MyString operator+(const MyString& _s){
 85         char* astr = new char[strlen(str) + strlen(_s.str) + 1];
 86         strcpy(astr,str);
 87         strcat(astr,_s.str);
 88         return MyString(astr);
 89     }
 90     
 91     friend MyString operator+(const char* _str,const MyString _s){
 92         MyString tmp(_str);
 93         tmp = tmp + _s;
 94         return tmp;
 95     }
 96     
 97     char& operator[](int n){
 98         return str[n];
 99     }
100     
101     MyString operator+=(char* _str){
102         *this = *this + MyString(_str);
103         return *this;
104     }
105     
106     char* operator()(int start,int ll){
107         char *s = new char[ll + 1];
108         for(int i = start;i < start + ll;++ i)
109          s[i - start] = str[i];
110         s[ll] = '\0';
111         return s;
112     }
113     
114     bool operator<(const MyString& _s){
115         if(strcmp(str,_s.str) < 0)
116           return true;
117         return false;
118     }
119     
120     bool operator==(const MyString& _s){
121         if(strcmp(str,_s.str) == 0)
122           return true;
123         return false;
124     }
125     
126     bool operator>(const MyString& _s){
127         if(strcmp(str,_s.str) > 0)
128           return true;
129         return false;
130     }
131 };
132 
133 
134 int CompareString( const void * e1, const void * e2)
135 {
136     MyString * s1 = (MyString * ) e1;
137     MyString * s2 = (MyString * ) e2;
138     if( * s1 < *s2 )
139     return -1;
140     else if( *s1 == *s2)
141     return 0;
142     else if( *s1 > *s2 )
143     return 1;
144 }
145 int main()
146 {
147     MyString s1("abcd-"),s2,s3("efgh-"),s4(s1);
148     MyString SArray[4] = {"big","me","about","take"};
149     cout << "1. " << s1 << s2 << s3<< s4<< endl;
150     s4 = s3;
151     s3 = s1 + s3;
152     cout << "2. " << s1 << endl;
153     cout << "3. " << s2 << endl;
154     cout << "4. " << s3 << endl;
155     cout << "5. " << s4 << endl;
156     cout << "6. " << s1[2] << endl;
157     s2 = s1;
158     s1 = "ijkl-";
159     s1[2] = 'A' ;
160     cout << "7. " << s2 << endl;
161     cout << "8. " << s1 << endl;
162     s1 += "mnop";
163     cout << "9. " << s1 << endl;
164     s4 = "qrst-" + s2;
165     cout << "10. " << s4 << endl;
166     s1 = s2 + s4 + " uvw " + "xyz";
167     cout << "11. " << s1 << endl;
168     qsort(SArray,4,sizeof(MyString),CompareString);
169     for( int i = 0;i < 4;i ++ )
170     cout << SArray[i] << endl;
171     //s1的从下标0开始长度为4的子串
172     cout << s1(0,4) << endl;
173     //s1的从下标5开始长度为10的子串
174     cout << s1(5,10) << endl;
175     return 0;
176 }
  1 #include <cstdlib>
  2 #include <iostream>
  3 using namespace std;
  4 int strlen(const char * s) 
  5 {    int i = 0;
  6     for(; s[i]; ++i);
  7     return i;
  8 }
  9 void strcpy(char * d,const char * s)
 10 {
 11     int i = 0;
 12     for( i = 0; s[i]; ++i)
 13         d[i] = s[i];
 14     d[i] = 0;
 15         
 16 }
 17 int strcmp(const char * s1,const char * s2)
 18 {
 19     for(int i = 0; s1[i] && s2[i] ; ++i) {
 20         if( s1[i] < s2[i] )
 21             return -1;
 22         else if( s1[i] > s2[i])
 23             return 1;
 24     }
 25     return 0;
 26 }
 27 void strcat(char * d,const char * s)
 28 {
 29     int len = strlen(d);
 30     strcpy(d+len,s);
 31 }
 32 class MyString
 33 {
 34 private:
 35     char* str;
 36 public:
 37     MyString(){
 38         str = new char[1];
 39         str[0] = '\0';
 40     }
 41     
 42     MyString(const char* _str){
 43         str = new char[strlen(_str) + 1];
 44         strcpy(str,_str);
 45     }
 46     
 47     MyString(const MyString& _s){
 48         if(_s.str){
 49             str = new char[strlen(_s.str) + 1];
 50             strcpy(str,_s.str);
 51         }  
 52         else{
 53             str = new char[1];
 54             str[0] = '\0';
 55         }
 56     }
 57     
 58     ~MyString(){if(str) delete []str;}//
 59     
 60     MyString operator=(const MyString& _s){//
 61         if(str == _s.str)
 62           return *this;
 63         delete []str; 
 64         if(_s.str){
 65            str = new char[strlen(_s.str) + 1];
 66            strcpy(str,_s.str);
 67         }
 68         else{
 69            str = new char[1];
 70            str[0] = '\0';
 71         }
 72         return *this;
 73     }
 74     
 75     MyString operator+(const MyString& _s){//
 76         char* astr = new char[strlen(str) + strlen(_s.str) + 1];
 77         strcpy(astr,str);
 78         strcat(astr,_s.str);
 79         return MyString(astr);
 80     }
 81     
 82     friend MyString operator+(const char* _str,const MyString _s){//
 83         MyString tmp(_str);
 84         tmp = tmp + _s;
 85         return tmp;
 86     }
 87     
 88     friend ostream& operator<< (ostream& o,const MyString& s) {
 89         o << s.str;
 90         return o;
 91     }
 92     char& operator[] (int i) {
 93         return str[i];
 94     }
 95     /*MyString& operator+= (const char* s) {
 96         char* tmp = new char[strlen(str) + 1];
 97         strcpy(tmp, str);
 98         delete[] str;
 99         str = new char[strlen(tmp) + strlen(s) + 1];
100         strcpy(str, tmp);
101         strcat(str, s);
102         return *this;
103     }*/
104     MyString operator+=(char* _str){
105         *this = *this + MyString(_str);
106         return *this;
107     }
108     
109     friend bool operator< (const MyString& s1,const MyString& s2) {
110         if (strcmp(s1.str, s2.str) < 0) {
111             return true;
112         }
113         else {
114             return false;
115         }
116     }
117     friend bool operator> (const MyString& s1,const MyString& s2) {
118         if (strcmp(s1.str, s2.str) > 0) return true;
119         else
120             return false;
121     }
122     friend bool operator== (const MyString& s1,const MyString& s2) {
123         if (strcmp(s1.str, s2.str) == 0) return true;
124         else
125             return false;
126     }
127 
128     char* operator() (int start, int length) {
129         char* tmp = new char[length + 1];
130         for (int i = start; i < start + length; ++i) {
131             tmp[i - start] = str[i];
132         }
133         tmp[length] = '\0';
134         return tmp;}
135     
136 };
137 
138 
139 int CompareString( const void * e1, const void * e2)
140 {
141     MyString * s1 = (MyString * ) e1;
142     MyString * s2 = (MyString * ) e2;
143     if( * s1 < *s2 )
144     return -1;
145     else if( *s1 == *s2)
146     return 0;
147     else if( *s1 > *s2 )
148     return 1;
149 }
150 int main()
151 {
152     MyString s1("abcd-"),s2,s3("efgh-"),s4(s1);
153     MyString SArray[4] = {"big","me","about","take"};
154     cout << "1. " << s1 << s2 << s3<< s4<< endl;
155     s4 = s3;
156     s3 = s1 + s3;
157     cout << "2. " << s1 << endl;
158     cout << "3. " << s2 << endl;
159     cout << "4. " << s3 << endl;
160     cout << "5. " << s4 << endl;
161     cout << "6. " << s1[2] << endl;
162     s2 = s1;
163     s1 = "ijkl-";
164     s1[2] = 'A' ;
165     cout << "7. " << s2 << endl;
166     cout << "8. " << s1 << endl;
167     s1 += "mnop";
168     cout << "9. " << s1 << endl;
169     s4 = "qrst-" + s2;
170     cout << "10. " << s4 << endl;
171     s1 = s2 + s4 + " uvw " + "xyz";
172     cout << "11. " << s1 << endl;
173     qsort(SArray,4,sizeof(MyString),CompareString);
174     for( int i = 0;i < 4;i ++ )
175     cout << SArray[i] << endl;
176     //s1的从下标0开始长度为4的子串
177     cout << s1(0,4) << endl;
178     //s1的从下标5开始长度为10的子串
179     cout << s1(5,10) << endl;
180     return 0;
181 }

 

posted @ 2022-09-13 22:46  balabalahhh  阅读(75)  评论(0)    收藏  举报