自己动手封装一个string类
2011-11-27 00:29
337 查看
通常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;
}
};
#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;
}
};
相关文章推荐
- 自己动手封装一个url参数解释器( ghostWuUrlParser.js )
- 自己动手写一个 iOS 网络请求库(NSURLSession 初探、封装接口、降低耦合、快速文件上传 )
- 自己动手写一个 iOS 网络请求库(二)——封装接口
- 自己动手实现一个简单的string类(一)
- 自己动手写一个 iOS 网络请求库——封装接口
- 自己动手实现一个简单的string类(二)
- 自己动手实现一个简单的String类
- 自己动手封装一个url参数解释器( ghostWuUrlParser.js )
- 自己动手实现一个简单的string类(三)
- 自己封装的一个原生JS拖动方法。
- 自己封装的一个JS分享组件
- 自己封装的一个简易的二维表类SimpleTable
- Life is a Do-it-yourself Project 生活是一个自己动手的项目
- asp.net 自己封装数据库操作一个类中一个自定义方法Execute(),非常实用,省去了麻烦的中间过程,动态参数
- 自己动手用Javascript写一个无刷新分页控件
- 自己动手编写一个VS插件(四)——创建工具栏之二
- 自己写的一个参数封装组件
- 自己动手实现一个简单的Ajax
- 教程:动手用自己电脑搭建一个网站
- 自己动手,写一个小巧的Rating