博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
自己模拟写C++中的String类型
阅读量:6623 次
发布时间:2019-06-25

本文共 3901 字,大约阅读时间需要 13 分钟。

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

    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
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
#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
0) return true; else return false; } ostream & operator<<(ostream & os,const String & st2) { os<
>(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 
#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<<"没有输入"<

 

转载于:https://www.cnblogs.com/JsonZhangAA/p/7207092.html

你可能感兴趣的文章
切换 ip 批处理
查看>>
CommandArgument 绑定多个参数
查看>>
dropdownlist可以多选。类似的例子。。。
查看>>
Objective-C 内存管理
查看>>
Linux下rz,sz与ssh的配合使用
查看>>
pku 1054 The Troublesome Frog 暴力+剪枝
查看>>
串行,并行,并发
查看>>
第1章关键角色及其职责——明白职责
查看>>
IOS CoreData 多表查询(下)
查看>>
mysql查询常用小语句
查看>>
webservice测试工具
查看>>
BabeLua常见问题
查看>>
python -- ajax数组传递和后台接收
查看>>
Porting .Net RSA xml keys to Java
查看>>
检测 nginx.conf 是否配置正确
查看>>
最长公共子序列|最长公共子串|最长重复子串|最长不重复子串|最长回文子串|最长递增子序列|最大子数组和...
查看>>
测试妹子的呐喊:为什么总是收不到推送?
查看>>
linux NFS
查看>>
Jquery DataTable基本使用
查看>>
leetcode 674. Longest Continuous Increasing Subsequence
查看>>