String类简单实现(构造、拷贝构造、析构、赋值、输出、比较、字符串加、长度、子串)
2013-10-13 10:11
831 查看
实现说明:字符串类String的简单实现,内部采用字符数组
实现运行平台:VS2010
参考:http://rsljdkt.iteye.com/blog/770072
经验说明:拷贝构造函数、重载赋值运算符、实现析构函数三个操作在实现自定义类时往往同时出现。
实现运行平台:VS2010
参考:http://rsljdkt.iteye.com/blog/770072
经验说明:拷贝构造函数、重载赋值运算符、实现析构函数三个操作在实现自定义类时往往同时出现。
#include <iostream> using namespace std; class String{ public: String(const char *str = NULL);//默认构造函数 String(const String &str);//复制构造函数 ~String();//析构函数 String operator+(const String & str);//字符串连接 String & operator=(const String &str);//字符串赋值 bool operator==(const String &str);//判断是否字符串相等 int Length();//获取字符串长度 friend ostream & operator<<(ostream &o,const String &str);//重载输出 String SubStr(int start, int end);//求子字符串(start ... end-1) private: char * charArray; }; String::String(const char *str) { if(str == NULL){ charArray=new char[1]; charArray[0]='\0'; }else{ charArray=new char[strlen(str)+1]; strcpy(charArray,str); } } String::String(const String &str) { charArray = new char[strlen(str.charArray)+1]; strcpy(charArray,str.charArray); } String::~String() { delete [] charArray; } String String::operator+(const String &str) { String res; delete [] res.charArray;//释放原有空间 res.charArray = new char[strlen(charArray)+strlen(str.charArray)+1]; strcpy(res.charArray,charArray); strcpy(res.charArray+strlen(charArray),str.charArray); return res; } String & String::operator=(const String &str) { if(charArray == str.charArray) return *this; delete [] charArray; charArray = new char[strlen(str.charArray)+1]; strcpy(charArray,str.charArray); return *this; } bool String::operator==(const String &str) { return strcmp(charArray,str.charArray) == 0; } int String::Length() { return strlen(charArray); } ostream & operator<<(ostream &o, const String &str) { o<<str.charArray; return o; } String String::SubStr(int start, int end) { String res; delete [] res.charArray;//释放原有内存 res.charArray = new char[end-start+1];//重新申请内存 for(int i=0; i+start<end; i++){ res.charArray[i]=charArray[start+i]; } res.charArray[end-start] = '\0'; return res; } void test() { String s = "abcd"; String t = "abcd"; cout<<s<<(s==t?" == ":" != ")<<t<<endl; String s2 = "Hello "; String s3 = "China!"; cout<<s2+s3<<endl; cout<<(s2+s3).SubStr(0,s2.Length()+s3.Length())<<endl; } int main() { test(); system("pause"); }
相关文章推荐
- 请用c++ 实现stl中的string类,实现构造,拷贝构造,析构,赋值,比较,字符串相加,获取长度及子串等功能
- 请用c++ 实现stl中的string类,实现构造,拷贝构造,析构,赋值,比较,字符串相加,获取长度及子串等功能。
- 简单的String类(构造、拷贝构造、赋值构造、析构等)
- 结构体的构造、拷贝、赋值、析构和字符串的拷贝、构造、赋值和析构函数的比较
- string类构造、拷贝构造、赋值、操作符函数实现及注意事项
- string类构造、拷贝构造、赋值、操作符函数实现及注意事项
- 类的基本成员函数实现(构造,拷贝构造,拷贝赋值,移动构造,移动赋值,析构)
- string类的实现(构造,拷贝构造,赋值元算符及输出流的实现)
- 让我们一步一步实现一个完整的 String 类:构造、拷贝、赋值、移动和析构
- 字符串拷贝/字符串比较/字符串连接/字符串长度/字符子串/内存块复制/内存块赋值初始化库函数实现
- C++【拷贝构造】和【拷贝赋值】(实现自定义的string类)
- 实现一个string类,包括构造、析构、拷贝构造及operator= 函数
- 用char*实现的一个完整的类,包含类的基本操作:一般构造、拷贝构造、赋值转换、重载 > >,< <
- C语言:模拟实现strstr函数,若是子串,输出子串后面的字符串,否则输出null
- 编写高质量代码改善C#程序的157个建议[为类型输出格式化字符串、实现浅拷贝和深拷贝、用dynamic来优化反射]
- 手写两个类,要体现构造,析构,拷贝构造,赋值,虚函数,重载函数等特点。
- c语言输出字符串中最大对称子串长度的3种解决方案
- 通过模板的特化实现 简单的类型萃取 实现memcppy时候对于特殊类型如string类的拷贝。
- Python简单实现查找一个字符串中最长不重复子串的方法
- 输入一行子串,找出其中出现的相同且长度最长的字符串,输出它及其首字符的位置