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

2018-06-17 22:11:48来源:未知 阅读 ()

新老客户大回馈,云服务器低至5折

下面是模拟实现字符串的相关功能,它包括一下功能:
    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]=='\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;
}

 

标签:

版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有

上一篇:05:Cave Cows 1 洞穴里的牛之一

下一篇:C++基础