您的位置:首页 > 其它

string 类的实现

2016-06-22 17:10 197 查看
string类的实现,主要包含这几个函数:构造、拷贝构造、析构、赋值、比较、字符串相加、获取长度及子串。

下面是代码:

#include <iostream>
#include <cstring>

using namespace std;

class String
{
public:
String(const char* str = NULL ); //普通构造函数
String(const String & other);  //拷贝构造函数
~String(void);   //析构函数
String& operator = (const String& other); //赋值函数

String operator+(const String& other);
bool operator==(const String& other);  //判断字符串是否相等
int length(); //字符串长度
String substr(int start, int n); //取子串
friend ostream& operator<< (ostream& o, const String& other);
private:
char *m_data;
int size;
};

String::String(const char *str)
{
if(str == NULL)
{
m_data = new char[1];
*m_data = '\0';
}
else
{
size = strlen(str);
m_data = new char[size+1];
strcpy(m_data,str);
}

}

String::String(const String& other)
{
size = other.size;
m_data = new char[other.size+1];
strcpy(m_data, other.m_data);
}

String::~String(void)
{
delete [] m_data;
}

String& String::operator=(const String& other)
{
if(this == &other)     //这里检查是否自赋值
return *this;
delete [] m_data;
size = other.size;
m_data = new char[size+1];
strcpy(m_data,other.m_data);
return *this;  //返回当前对象
}

String String::operator+(const String& other)
{
String newStr;
delete [] newStr.m_data;
newStr.size = size+other.size;
newStr.m_data = new char[newStr.size+1];
strcpy(newStr.m_data,m_data);
strcpy(newStr.m_data+size,other.m_data);
return newStr;
}

bool String::operator==(const String& other)
{
return strcmp(m_data,other.m_data) == 0;
}

int String::length()
{
return size;
}

String String::substr(int start, int n)
{
String newStr;
delete [] newStr.m_data;
newStr.m_data = new char[n+1];
for(int i = 0; i < n; ++i)
newStr.m_data[i] = m_data[start+i];
newStr.m_data
= '\0';
newStr.size = n;
return newStr;
}

ostream&  operator<< (ostream& o, const String& other)
{
o<<other.m_data;
return o;
}

int main()
{
String str1("hello");
String str2("world");
String str3(str2);
String str4 = str1+str2;
cout <<"str1->" << str1<< " size->" <<str1.length()<< endl;
cout <<"str4->" << str4 << " size->" << str4.length()<< endl;

String str5("helloworld");
if(str4 == str5)
cout << "str4 the same as str5" << endl;
else
cout << "str4 is not the same as str5" << endl;
cout << str4.substr(6,5)<< " size->" << str4.substr(6,5).length()<<endl;
return 0;
}


执行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: