zoukankan      html  css  js  c++  java
  • 自己模拟写C++中的String类型

    下面是模拟实现字符串的相关功能,它包括一下功能:
        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()!='
    ')
                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()!='
    ')
            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;
    }
  • 相关阅读:
    一些小题
    文件操作_菜单<代码>
    文件操作
    linux基础学习
    列表,元组,字典
    系统集成项目管理工程师高频考点(第六章)
    系统集成项目管理工程师高频考点(第五章)
    系统集成项目管理工程师高频考点(第四章)
    系统集成项目管理工程师高频考点(第三章)
    信息系统项目管理师高频考点(第一章)
  • 原文地址:https://www.cnblogs.com/JsonZhangAA/p/7207092.html
Copyright © 2011-2022 走看看