posts - 183,  comments - 10,  trackbacks - 0
设计一个字符串类 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, 0sizeof (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& outconst 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& outconst 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)  编辑 收藏 引用

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理