现在的位置: 首页 > 综合 > 正文

C++ 学习第一天 简单string类的模拟

2013年10月27日 ⁄ 综合 ⁄ 共 3002字 ⁄ 字号 评论关闭

////大部分的代码来自于零起点学通C++

#include <iostream>
#include <cstring>
using namespace std;
class String
{
public:
	String();
	~String();
	String(const char *const ch);
	String(const String &t);
	char &operator[](unsigned short int length);
	char operator[](unsigned short int length)const;
	String operator+(const String &a);
	String &operator=(const String &a);
	void operator+=(const String &a);
	friend ostream &operator<<(ostream &os,const String &t)
	{
		os<<t.str<<endl;
		return os;
	}
	friend istream &operator>>(istream &in,String &t)
	{
		in>>t.str;
		return in;
	}
	friend bool operator<(const String &a,const String &b)
	{
		if (strcmp(a.str,b.str)<0)
			return 1;
		else
			return 0;
	}
	friend bool operator>(const String &a,const String &b)
	{
		if (strcmp(a.str,b.str)>0)
			return 1;
		else
			return 0;
	}
	friend bool operator==(const String &a,const String &b)
	{
		if (strcmp(a.str,b.str)==0)
			return 1;
		else
			return 0;
	}
	unsigned short int getlength()const{return length;}
	const char *getstr()const{return str;}
private:
	int length;
	char *str;
	String(unsigned short int);
};
String::String(unsigned short int len)
{
	str = new char[len+1];
	for (int i=0;i<=len;i++)
	{
		str[i] = '\0';
	}
	length = len;
}
String String::operator+(const String&t)
{
	int length_total = length + t.getlength();
	String temp(length_total);
	int i,j;////////////////
	for (i=0;i<length;i++)
	{
		temp[i] = str[i];
	}
	for(j=0;j<t.getlength();j++,i++)
		temp[i] = t[j];
	temp[length_total] = '\0';
	return temp;
}
//////////////
char &String::operator[](unsigned short int len)
{
	if (len>length)	
		return str[length-1];
	else
		return str[len];
		
}
char String::operator[](unsigned short int len)const
{
	if(len>length)
		return str[length-1];
	else
		return str[len];
}
String::~String()
{
	delete []str;
	length = 0;
}
///////////////
String::String()
{
	length = 0;
	str = new char[1];
	str[0] = '\0';
}
/////////////////////
String::String(const char *const ch)
{
	length = strlen(ch);//将得到的字符数组长度给length
	str = new char[length+1];//
	for (int i=0;i<length;i++)
		
			str[i] = ch[i];		
	str[length] = '\0';//这一步非常重要,表示复制的字符串结束了
}
String::String(const String &t)
{
	length = t.getlength();
	str = new char[length+1];
	for(int i=0;i<length;i++)
		str[i] = t[i];
	str[length]='\0';
}

String &String::operator=(const String & s)
{
	if (this == &s)
	{
		return *this;
	}
	delete []str;
	length = s.getlength();
	str = new char[length +1];
	for(int i=0;i<length;i++)
	{
		str[i] = s[i];
	}
	str[length] = '\0';
	return *this;
}
/////////////////
void String::operator+=(const String &t)
{
	int length_total = length+t.getlength();
	String temp(length_total);
	int i,j;
	for (i=0;i<length;i++)
	{
		temp[i] = str[i];
	}
	for(j=0;j<t.getlength();j++,i++)
		temp[i] = t[j];
	temp[length_total] = '\0';
	*this = temp;

}
void main()
{
	String str;
	cout<<"str:"<<str.getstr()<<"共"<<str.getlength()<<"个字符"<<endl;
	String str1("china");
	cout<<"str1:"<<str1.getstr()<<"共"<<str1.getlength()<<"个字符"<<endl;
	char *temp = "English";
	String str2(temp);//构造函数
	cout<<"str2:"<<str2.getstr()<<"共"<<str2.getlength()<<"个字符"<<endl;
	cout<<"please input a character:\n";
	int number;
	cout<<"输入你想输入的下标";
	cin>>number;
	cout<<"输入一个字符";
	cin>>str[number];
	if (number>=str2.getlength())
		cout<<"the length of the string is "<<str2.getlength()
			<<"the number you input is overflow"<<endl;
	cout<<str2[number]<<endl;
	String str3 = "mother";
	String str4("father");
	cout<<"str3:"<<str3<<endl;
	cout<<"str4:"<<str4<<endl;
	String str5 = str3+str4;
	cout<<"str5:"<<str5<<endl;
	system("pause");
}

抱歉!评论已关闭.