用C++实现String类

原创 2015年07月08日 22:19:58

用C++编写一个精简版的String类,可以实现以下功能:

1、对字符串进行初始化

String s1=“Hello World”;

2、可计算字符串的长度

cout<<s1.getlen()<<endl;

3、可对字符串进行肤质操作

String s2;    //定义一个空字符串s2

s2=s1;       //将s1赋值给s2

4、重载运算符<<来输出字符串

cout<<s1<<s2;

5、重载运算符>>来输入字符串

cout>>s1>>s2;

6、可将char型字符串直接赋给String型字符串

String s1="Hello World"; char ch[11]="not at all";  s1=ch;

7、可像构造对象那样定义字符串

String s3;        //可以定义一个空字符串

String s4{"Mother");     //也可以定义一个有字符的字符串

8、可用下表运算符来操作字符串,并限制数组越界

cout<<s1[999];

9、可对两个字符串进行比较:s1==s2;s1<s2;s1>s2;

10、可将两个字符串相加:s1+s2(暂未实现)

等等-----可待继续完善

#include"StdAfx.h"
#include<iostream>
using namespace std;

class String
{
public:
	String();                                     
	String(const char* const ch);                 //带参数的默认构造函数,来初始化字符串
	int getlen()const{return len;}                
	friend ostream &operator<<(ostream&o,String&str);//重载输出运算符<<,由于含有其它类的对象,需要定义为友元
	friend istream &operator>>(istream&i,String&str);//重载输入运算符>>
	char &operator[](int length);                 //重载运算符[]
	String &operator=(String &s);              //重载赋值运算符=
	friend bool operator<(String&str1,String&str2);//重载比较运算符<
	//当二元运算符<,>,==做成员函数时,参数只能有一个,所以修饰为友元函数(非成员函数)后就可以有两个参数
private:
	int len;   //字符串长度
	char*str;  //字符串数组的地址
}; 
String::String()                    //默认构造函数来构造一个空字符串
{
	len=0;
	str=new char[1];
	str[0]='\0';
}
String::String(const char* const ch) //初始化字符串,来实现String s2("Mother");
{
	len=strlen(ch);
	str=new char[len+1];
	for(int i=0;i<len;i++)
	{
		str[i]=ch[i];
	}
	str[len]='\0';
}
ostream &operator<<(ostream&o,String&str) //重载<<实现cout,cout是属于输出流ostream的一个对象
{
	o<<str.str;
	return o;
}
istream &operator>>(istream&i,String&str)  //重载>>实现cin
{
	i>>str.str;
	return i;
}
char & String::operator[](int length)   //重载运算符[],限制数组越界
{
	if(length>len)
	{
		return str[len-1];
	}
	else return str[length];
}
String &String::operator=(String &s)  //实现s5=s3=s2的赋值
{
	if(this==&s)
	{
		return *this;
	}
	delete []str;
	len=s.getlen();
	str=new char[len+1];
	for(int i=0;i<len;i++)
	{
		str[i]=s[i];
	}
	str[len]='\0';
	return *this;
}
bool operator<(String&str1,String&str2)  //比较运算符>、==的实现同理
{
	if(strcmp(str1.str,str2.str)<0)
	{
		return 1;
	}
}
void main()
{
	String s;
	cout<<"s:"<<s<<endl;
	String s1="Hello World";
	cout<<"s1:"<<s1<<'\n';
	cout<<"s1[999]:"<<s1[999]<<endl;
	String s2("Mother");
	cout<<"s2:"<<s2<<endl;
	char *temp="hehe";
	String s3(temp);
	cout<<"s3:"<<s3<<endl;
	String s4;
	cout<<"输入一个字符串s4:";
	cin>>s4;
	cout<<"s4:"<<s4<<endl;
	String s5;
	s5=s3=s2;
	cout<<"s5:"<<s5<<endl;
	String s6("aaa");
	String s7("bbb");
	int check=s6<s7;
	cout<<"s6<s7?"<<"\t"<<check<<endl;
}



String类C++实现,有详细注释

  • 2011年11月01日 19:37
  • 1KB
  • 下载

C++实现string类字符串单词的逆序输出

利用c++实现string类字符串单词的逆序输出

c++string类的实现

  • 2014年11月23日 12:01
  • 416KB
  • 下载

C++ 简易string类实现(四)-自动操作引用次数

在 C++ 简易string类实现(三)-抽离引用计数中,RCObject class给了我们一个放置引用次数的空间,也给了我们一些member functions,用来操作引用次数.然而,这些函数的...

典型的String类实现C++

  • 2012年11月22日 14:53
  • 3KB
  • 下载

[经典面试题][百度]c++实现STL中的string类

题目请用c++ 实现stl中的string类,实现构造,拷贝构造,析构,赋值,比较,字符串相加,获取长度及子串等功能。代码/*-------------------------------------...

用c++实现的String类

  • 2010年01月15日 00:14
  • 6KB
  • 下载
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用C++实现String类
举报原因:
原因补充:

(最多只允许输入30个字)