本文最后更新于:2021年8月26日 下午
实现 String 类。
参考《后台开发 核心技术与应用实践》p82,2021微信支付后台开发面试题
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106
| class String { public: String(const char* str = NULL); String(const String &str); ~String();
String& operator=(const String &str); String operator+(const String &str) const; String& operator+=(const String &str); char& operator[](int n) const; bool operator==(const String &str) const;
int size() const; const char *c_str() const;
private: char *data; int length; };
String::String(const char* str) { if (!str) { length = 0; data = new char[1]; *data = '\0'; } else { length = strlen(str); data = new char[length + 1]; strcpy(data, str); } }
String::String(const String &str) { length = str.size(); data = new char[length + 1]; strcpy(data, str.c_str()); }
String::~String() { delete[] data; data = nullptr; length = 0; }
String& String::operator=(const String &str) { if (this == &str) return *this;
delete[] data;
length = str.size(); data = new char[length + 1]; strcpy(data, str.c_str());
return *this; } String String::operator+(const String &str) const { String newString; newString.length = length + str.size(); newString.data = new char[newString.length + 1]; strcpy(newString.data, data); strcat(newString.data, str.data); return newString; }
String& String::operator+=(const String &str) { length += str.size(); char *newdata = new char[length + 1]; strcpy(newdata, data); strcat(newdata, str.c_str()); delete[] data; data = newdata; return *this; }
char& String::operator[](int n) const { if (n >= length) return data[length - 1]; else return data[n]; }
bool String::operator==(const String &str) const { if (length != str.size()) return false; return strcmp(data, str.c_str()) ? false : true; }
int String::size() const { return length; }
const char *String::c_str() const { return data; }
|