自己模拟写C++中的String类型实例讲解分享

—-想了解自己模拟写C++中的String类型实例讲解分享的全部内容且更多的C语言教程关注<计算机技术网(www.ctvol.com)!!>

下面是模拟实现字符串的相关功能,它包括一下功能:

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=80;    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=0;  int String::length()  {    return this->len;  }    String::String(const char * s)    {      len=strlen(s);      str=new char[len+1];      num_strings++;    }    String::String()    {      str=0;      len=0;      num_strings++;    }      String::String(const String & s)    {      num_strings++;      len=strlen(s.str);      str=new char[len+1];      strcpy(str,s.str);    }    String::~String()    {      --num_strings;      delete [] str;      len=0;    }    String & String::operator=(const String & s)    {      if(this==&s)        return *this;      delete [] str;      len=strlen(s.str);      str=new char[len+1];      strcpy(str,s.str);      // num_strings++;    }    String & String::operator=(const char * s)    {      len=strlen(s);      str=new char[len+1];      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)<0)        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)>0)        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[5];    char temp[10];    int i;    for(i=0;i<5;i++)    {      cin.get(temp,10);      while(cin&&cin.get()!='n')      continue;      if(!cin&&temp[0]=='')//如果是空串的话,cin会为false       break;      else      name[i]=temp;    }    int total=i;    int firs=0,shor=0;    if(total<0)    {      cout<<"没有输入"<<endl;    }else{      for(i=0;i<total;i++)      {        cout<<name[i][0]<<":"<<name[i]<<endl;      }      for(i=0;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 0;  }

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/c-cdevelopment/488303.html

(0)
上一篇 2020年11月12日
下一篇 2020年11月12日

精彩推荐