设计一个字符串类 String,实现
·+= 连接两个字符串
·+ 连接两个字符串
·== 判断两个字符串是否相等
·< 判断两个字符串大小关系
类的声明:
class String
{
private:
char* mychar;
int len;
public:
};
代码:
1 #include <iostream>
2 #include <cstring>
3 using namespace std;
4
5 class String
6 {
7 private:
8 char* mychar;
9 int len;
10 private:
11 void clear()
12 {
13 delete[] mychar;
14 mychar = 0;
15 len = 0;
16 }
17 public:
18 String(char* s = "")
19 {
20 int l = strlen(s);
21 mychar = new char[l + 1];
22 if (mychar != 0)
23 {
24 strcpy(mychar, s);
25 len = l;
26 }
27 }
28 String(const String& s)
29 {
30 mychar = new char[s.len + 1];
31 if (mychar != 0)
32 {
33 strcpy(mychar, s.mychar);
34 len = s.len;
35 }
36 }
37 String& operator=(const String& s)
38 {
39 if (this != &s)
40 {
41 clear();
42 mychar = new char[s.len + 1];
43 if (mychar != 0)
44 {
45 strcpy(mychar, s.mychar);
46 len = s.len;
47 }
48 }
49 return *this;
50 }
51 ~String()
52 {
53 clear();
54 }
55 String& operator +=(const String& s)
56 {
57 int l = len + s.len + 1;
58 char* t = new char[l];
59 if (t != 0)
60 {
61 // 初始化内存
62 memset(t, 0, sizeof (char) * l);
63 strcat(t, mychar);
64 strcat(t, s.mychar);
65 }
66 delete [] mychar;
67 mychar = t;
68 len = l;
69 return *this;
70 }
71
72 friend String operator +(const String& lhs, const String& rhs);
73 friend bool operator ==(const String& lhs, const String& rhs);
74 friend bool operator < (const String& lhs, const String& rhs);
75 friend istream& operator >>(istream& in, String& s);
76 friend ostream& operator <<(ostream& out, const String& s);
77 };
78
79 String operator +(const String& lhs, const String& rhs)
80 {
81 String t(lhs);
82 return t += rhs;
83 }
84
85 bool operator==(const String& lhs, const String& rhs)
86 {
87 return strcmp(lhs.mychar, rhs.mychar) == 0;
88 }
89
90 bool operator<(const String& lhs, const String& rhs)
91 {
92 return strcmp(lhs.mychar, rhs.mychar) < 0;
93 }
94
95 bool operator >(const String& lhs, const String& rhs)
96 {
97 return !(lhs < rhs) && !(lhs == rhs);
98 }
99
100 bool operator <=(const String& lhs, const String& rhs)
101 {
102 return lhs < rhs || lhs == rhs;
103 }
104
105 bool operator >=(const String& lhs, const String& rhs)
106 {
107 return !(lhs < rhs);
108 }
109
110 istream& operator >>(istream& in, String& s)
111 {
112 s.clear();
113 char t[100];
114 in >> t;
115 if (!in)
116 {
117 cerr << "Input error!" << endl;
118 exit(1);
119 }
120 int l = strlen(t);
121 s.mychar = new char[l + 1];
122 if (s.mychar != 0)
123 {
124 strcpy(s.mychar, t);
125 s.len = l;
126 }
127 return in;
128 }
129
130 ostream& operator <<(ostream& out, const String& s)
131 {
132 out << s.mychar;
133 return out;
134 }
135
136 int main()
137 {
138 String s1, s2;
139 while (cin >> s1 >> s2)
140 {
141 cout << s1 << endl;
142 cout << s2 << endl;
143 cout << (s1 == s2) << endl;
144 cout << (s1 < s2) << endl;
145 cout << (s1 > s2) << endl;
146 cout << (s1 <= s2) << endl;
147 cout << (s1 >= s2) << endl;
148
149 cout << s1 + s2 << endl;
150 s1 += s2;
151 cout << s1 << endl;
152 cout << s2 << endl;
153 s2 += s1;
154 cout << s1 << endl;
155 cout << s2 << endl;
156 }
157 return 0;
158 }
posted on 2011-04-22 13:12
unixfy 阅读(167)
评论(0) 编辑 收藏 引用