自己模拟写C++中的String类型

时间:2021-04-11 02:38:26

下面是模拟实现字符串的相关功能,它包括一下功能:
    String(const char * s);//利用字符串来初始化对象
    String();      //默认构造函数
    String(const String & s);//复制构造函数,利用String类型来初始化对象
    ~String();      //析构函数
    int length();      //返回String类型中字符串的长度
    String & operator=(const String & s);//重载=运算符。
    String & operator=(const char *);
    char & operator[](int i);  //重载【】运算符
    const char & operator[](int i) const;
    friend bool operator<(const String & st,const String & st2);//重载<运算符,用来比较String类型中字符串的大小。
    friend bool operator>(const String & st,const String & st2);
    friend bool operator==(const String & st,const String & st2);//重载==运算符,判断两个String对象是否相等
    friend ostream & operator<<(ostream & os,const String & st2);//重载输出函数
    friend istream & operator>>(istream & is,String & st2);//重载输入函数
    static int HowMang()//返回总共生成的String类对象的数目。

String.h:

#ifndef STRING_H_INCLUDED
#define STRING_H_INCLUDED
#include"iostream"
#include<string.h>
using std::ostream;
using std::istream;
class String{
private:
char * str;
int len;
public:
static int num_strings;
static const int CINLM=;
String(const char * s);
String();
String(const String & s);
~String();
int length();
String & operator=(const String & s);
String & operator=(const char *);
char & operator[](int i);
const char & operator[](int i) const;
friend bool operator<(const String & st,const String & st2);
friend bool operator>(const String & st,const String & st2);
friend bool operator==(const String & st,const String & st2);
friend ostream & operator<<(ostream & os,const String & st2);
friend istream & operator>>(istream & is,String & st2);
static int HowMang()
{
return num_strings; }
}; #endif // STRING_H_INCLUDED

String.cpp:

#include<iostream>
#include"String.h"
#include"string.h"
using namespace std;
int String::num_strings=;
int String::length()
{
return this->len;
}
String::String(const char * s)
{
len=strlen(s);
str=new char[len+];
num_strings++;
}
String::String()
{
str=;
len=;
num_strings++;
} String::String(const String & s)
{
num_strings++;
len=strlen(s.str);
str=new char[len+];
strcpy(str,s.str);
}
String::~String()
{
--num_strings;
delete [] str;
len=;
}
String & String::operator=(const String & s)
{
if(this==&s)
return *this;
delete [] str;
len=strlen(s.str);
str=new char[len+];
strcpy(str,s.str);
// num_strings++;
}
String & String::operator=(const char * s)
{
len=strlen(s);
str=new char[len+];
strcpy(str,s);
// num_strings++;
}
char & String::operator[](int i)
{
return str[i];
}
const char & String::operator[](int i) const
{
return str[i];
}
bool operator<(const String & st,const String & st2)
{
if(strcmp(st.str,st2.str)<)
return true;
else
return false;
}
bool operator>(const String & st,const String & st2)
{
return (st<st2)==false;
}
bool operator==(const String & st,const String & st2)
{
if(strcmp(st.str,st2.str)>)
return true;
else
return false;
}
ostream & operator<<(ostream & os,const String & st2)
{
os<<st2.str;
return os;
}
istream & operator>>(istream & is,String & st2)
{
char temp[String::CINLM];
is.get(temp,String::CINLM);
if(is)
st2=temp;
while(is&&is.get()!='\n')
continue;
return is;
}

main.cpp:

#include <iostream>
#include"String.h"
using namespace std;
int main()
{
String name[];
char temp[];
int i;
for(i=;i<;i++)
{
cin.get(temp,);
while(cin&&cin.get()!='\n')
continue;
if(!cin&&temp[]=='\0')//如果是空串的话,cin会为false
break;
else
name[i]=temp;
}
int total=i;
int firs=,shor=;
if(total<)
{
cout<<"没有输入"<<endl;
}else{
for(i=;i<total;i++)
{
cout<<name[i][]<<":"<<name[i]<<endl;
}
for(i=;i<total;i++)
{
if(name[i]<name[firs])
firs=i;
if(name[i].length()<name[shor].length())
shor=name[i].length();
}
}
cout<<"最短的字符串为:"<<name[shor]<<endl;
cout<<"最前面的字符串为:"<<name[firs]<<endl;
return ;
}