通常c++笔试题里会要求封装一个string类,这里面的确考查了对c++应用的能力,我这个人有个不好就是记性不怎么好,所以要靠记录下来给以后用到的时候做个参考.
#include <string.h>
class string {
char *str;
int size;
public:
string() {
size = 0;
str = NULL;
}
virtual ~string() {
empty();
}
string(const char *s) {
if (s) {
size = strlen(s)+1;
str = (char *)malloc(size);
strcpy(str, s);
} else {
size = 0;
str = NULL;
}
}
string(const string& s) {
if (s.str) {
size = strlen(s.str)+1;
str = (char *)malloc(size);
strcpy(str, s.str);
} else {
size = 0;
str = NULL;
}
}
void empty(void) {
if (str) {
size = 0;
free(str);
str = NULL;
}
}
string& operator=(const string& s) {
if (this != &s) {
empty();
if (s.str) {
size = strlen(s.str)+1;
str = (char *)malloc(size);
strcpy(str, s.str);
}
}
return *this;
}
string operator+(const string& s) const {
if (str && s.str) {
string _s;
_s.size = strlen(str) + strlen(s.str) + 1;
_s.str = (char *)malloc(size);
strcpy(_s.str, str);
strcat(_s.str, s.str);
return _s;
} else {
return str ? str : s.str;
}
}
bool operator==(const string& s) const {
if (str && s.str) {
return !strcmp(str, s.str);
} else if (!str && !s.str) {
return true;
} else {
return false;
}
}
operator char *() {
return str;
}
operator const char *() const {
return str;
}
};