C++ String类简单实现
2017-07-04 13:39
337 查看
#ifndef MYSTRING_H #define MYSTRING_H #include<iostream> using namespace std; class MyString { /*重载<<*/ friend ostream& operator<<(ostream& _cout, MyString& _MyString) { _cout << _MyString.string_address; return _cout; } /*重载>>*/ friend istream& operator>>(istream& _cin, MyString& _MyString) { if (_MyString.string_address) { free(_MyString.string_address); _MyString.string_address = NULL; } _MyString.string_address = (char*)calloc(1, 1024); if (!_MyString.string_address) cout << "分配内存失败" << endl; _cin >> _MyString.string_address; return _cin; } public: /*默认无参构造*/ MyString() :string_address(NULL) { } /*默认有参构造*/ MyString(const char* const_string) { string_address = (char*)calloc(1, strlen(const_string) + 1); if (!string_address) cout << "内存分配失败" << endl; strcpy(string_address, const_string); } /*拷贝构造*/ MyString(const MyString& other_MyString) { string_address = (char*)calloc(1, strlen(other_MyString.string_address) + 1); if (!string_address) cout << "内存分配失败" << endl; strcpy(string_address, other_MyString.string_address); } /*析构函数*/ ~MyString() { if (string_address){ free(string_address); string_address = NULL; } } /*普通成员函数*/ const char* c_str() const { return string_address; } /*获取字符串长度*/ size_t length() { return strlen(string_address); } size_t size() { return strlen(string_address); } /*重载=*/ MyString& operator=(const MyString& _MyString) { if (string_address) { free(string_address); string_address = NULL; } string_address = (char*)calloc(1, strlen(_MyString.string_address) + 1); if (!string_address) cout << "内存分配失败" << endl; strcpy(string_address, _MyString.string_address); return *this; } MyString& operator=(const char* const_string) { if (string_address) { free(string_address); string_address = NULL; } string_address = (char*)calloc(1, strlen(const_string) + 1); if (!string_address) cout << "内存分配失败" << endl; strcpy(string_address, const_string); return *this; } /*重载[]*/ char& operator[](size_t index) { if (index >= length()) return string_address[length() - 1]; return string_address[index]; } /*重载+=*/ MyString& operator+=(MyString& _MyString) { if (string_address){ if (_MyString.string_address){ string_address = (char*)realloc(string_address, length() + strlen(_MyString.string_address) + 1); if (!string_address) cout << "内存分配失败" << endl; strcat(string_address, _MyString.string_address); } } else { if (_MyString.string_address){ string_address = (char*)calloc(1, strlen(_MyString.string_address + 1)); if (!string_address) cout << "内存分配失败" << endl; strcpy(string_address, _MyString.string_address); } } return *this; } MyString& operator+=(const char* const_string) { if (string_address) { if (const_string) { string_address = (char*)realloc(string_address,length() + strlen(const_string) + 1); if (!string_address) cout << "内存分配失败" << endl; strcat(string_address, const_string); } } else { if (const_string) { string_address = (char*)calloc(1, strlen(const_string) + 1); if (!string_address) cout << "内存分配失败" << endl; strcpy(string_address, const_string); } } return *this; } /*重载+*/ MyString operator+(MyString& _MyString) { if (string_address) { if (_MyStr b9fb ing.string_address) { string_address = (char*)realloc(string_address, length() + _MyString.length() + 1); if (!string_address) cout << "内存分配失败" << endl; strcat(string_address, _MyString.string_address); } } else { if (_MyString.string_address) { string_address = (char*)calloc(1, _MyString.length() + 1); if (!string_address) cout << "内存分配失败" << endl; strcpy(string_address, _MyString.string_address); } } return *this; } MyString operator+(const char* const_string) { if (string_address) { if (const_string) { string_address = (char*)realloc(string_address, length() + strlen(const_string) + 1); if (!string_address) cout << "内存分配失败" << endl; strcat(string_address, const_string); } } else { if (const_string) { string_address = (char*)calloc(1, strlen(const_string) + 1); if (!string_address) cout << "内存分配失败" << endl; strcpy(string_address, const_string); } } return *this; } /*重载 ==*/ bool operator==(MyString& _MyString) { if (string_address) if (_MyString.string_address) if (!strcmp(string_address, _MyString.string_address)) return true; else if (!_MyString.string_address) return true; return false; } bool operator==(const char* const_string) { if (string_address) if (const_string) if (!strcmp(string_address, const_string)) return true; else if (!const_string) return true; return false; } /*重载!=*/ bool operator!=(MyString& _MyString) { if (string_address) if (_MyString.string_address) if (strcmp(string_address, _MyString.string_address)) return true; else if (_MyString.string_address) return true; return false; } bool operator!=(const char* const_string) { if (string_address) if (const_string) if (strcmp(string_address, const_string)) return true; else if (const_string) return true; return false; } private: char* string_address; }; #endif
相关文章推荐
- C++ string和map容器实现简单的英文翻译
- c++ String 类的简单实现和写时拷贝
- C++ string类简单实现
- C++ string 类的简单实现
- C++ string 简单实现
- c++ string的一些常用函数的源码以及string的简单实现
- C++ String 类的简单实现
- 简单的在线升级的实现方法
- 用vb.net与acess结合实现简单的电话号码本程序(一)
- 简单实现Crystal Report的动态加载
- 跨域名的Cookie实现---简单另类的实现方法
- 用NUnit2.1简单实现.net的测试驱动开发(TDD)
- 图像分割的一些简单实现
- 内容分页简单实现代码及祥解(C#)
- Dhtml+Js算法:5个小球运动的简化版,变通实现更简单的飞行的图片
- 打印的简单实现,以及更改打印设置
- Editplus + Zend Encoder实现简单PHP源码加密IDE环境
- ATL实现Connection Point的一种简单的方法
- http断点续传简单实现(java)
- 自己如何实现简单的http服务器