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



C++实现一个自己的string类

class String { public: String(const char *str = NULL);// 普通构造函数 String(const String &other); // 拷贝...
  • u011412619
  • u011412619
  • 2015年03月30日 21:26
  • 1898

c++ — 实现一个简单的string类

string类的实现 C++使用起来非常方便,原因的它里面包含的类,这种面向对象的思想让我们编程变得异常方便。 今天我们来实现一个string类,这个类主要的作用就是在C++中灵活的使用字符串。 现在...
  • Dawn_sf
  • Dawn_sf
  • 2017年03月13日 17:19
  • 520

C++笔试题之String类的实现

这个在面试或笔试的时候常问到或考到。 已知类String的原型为: class String { public: String(const char *str = NULL);// 普通...
  • caoshangpa
  • caoshangpa
  • 2016年05月29日 09:12
  • 4105

【C/C++】C++ String类的实现

面试的时候被问及了String类的实现,结果没写好... 就当是重新复习一下吧。 下面的程序并没有把String类的所有成员方法实现,只参考教程写了大部分重要的成员函数。#include #inclu...
  • moxiaomomo
  • moxiaomomo
  • 2011年05月11日 12:15
  • 38152

c++ string类的内部实现

#include #include #include using namespace std; class String{     friend ostream& operator friend ...
  • chenycbbc0101
  • chenycbbc0101
  • 2016年08月25日 19:07
  • 255

c++ string类的完整实现!!!

c++ string类的完整实现,标注库有的功能这里基本都有,在此基础上可以进行良好的扩充!!!...
  • focusing_on_cpp
  • focusing_on_cpp
  • 2015年06月29日 07:58
  • 5630

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

题目请用c++ 实现stl中的string类,实现构造,拷贝构造,析构,赋值,比较,字符串相加,获取长度及子串等功能。代码/*-------------------------------------...
  • SunnyYoona
  • SunnyYoona
  • 2015年03月31日 22:41
  • 2309

C++面试题(二)——自己实现一个String类

实现一个自己的String类是一道考验C++基础知识的好题。 至少要能实现以下:构造函数,析构函数,拷贝构造函数(copy constructor),重载赋值操作符(copy assignment o...
  • worldwindjp
  • worldwindjp
  • 2013年10月23日 12:13
  • 8941

C++ String类的构造函数、拷贝构造函数的实现

构造函数、析构函数与赋值函数是每个类最基本的函数,在一些公司的面试中也会经常问到这方面的问题。每个类只有一个析构函数和一个赋值函数,但可以有多个构造函数(包含一个拷贝构造函数,其它的称为普通构造函数)...
  • u011000290
  • u011000290
  • 2015年10月10日 10:51
  • 3444

c++之封装——string类型的实现

以前在C语言中并没有string这个内置类型,但是到了c++里面就可以使用了,c++中可以定义string变量,对string类型的变量可以进行各种操作,包括相加、相减、赋值等等,就和int ,dou...
  • Korey_sparks
  • Korey_sparks
  • 2016年08月04日 01:00
  • 763
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:用C++实现String类
举报原因:
原因补充:

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