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 }