关闭

用C++实现String类

61人阅读 评论(0) 收藏 举报
分类:

用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;
}



0
0

猜你在找
【直播】机器学习&数据挖掘7周实训--韦玮
【套餐】系统集成项目管理工程师顺利通关--徐朋
【直播】3小时掌握Docker最佳实战-徐西宁
【套餐】机器学习系列套餐(算法+实战)--唐宇迪
【直播】计算机视觉原理及实战--屈教授
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之矩阵--黄博士
【套餐】微信订阅号+服务号Java版 v2.0--翟东平
【直播】机器学习之凸优化--马博士
【套餐】Javascript 设计模式实战--曾亮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:190次
    • 积分:52
    • 等级:
    • 排名:千里之外
    • 原创:5篇
    • 转载:1篇
    • 译文:0篇
    • 评论:0条
    文章分类
    文章存档