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

自己模拟写C++中的String类型的更多相关文章

  1. C++中关于string类型究竟能不能用cout输出的问题

    先让我讲下故事哈 一次在MFC中用cout输出一个string类型字符串,编译时出现这样一个错误: error C2679: binary '<<' : no operator defin ...

  2. mysql语句中把string类型字段转datetime类型

    mysql语句中把string类型字段转datetime类型   在mysql里面利用str_to_date()把字符串转换为日期   此处以表h_hotelcontext的Start_time和En ...

  3. c/c++中关于String类型的思考

    首先说明:String并不是一种内置类型,因此任何通过String声明出来的实例都不是一个变量,不同于内置类型因此String仅仅能称之为一种特殊的型别,没错String是一个类类型. 一般来说c语言 ...

  4. java中关于String 类型数据 的存储方式

    Constant Pool常量池的概念: 在讲到String的一些特殊情况时,总会提到String Pool或者Constant Pool,但是我想很多人都不太 明白Constant Pool到底是个 ...

  5. 关于switch语句中使用String类型的实现原理

    在Java 7 以后,switch语句可以用作String类型上. 从本质来讲,switch对字符串的支持,其实也是int类型值的匹配.它的实现原理如下: 通过对case后面的String对象调用ha ...

  6. 3、Redis中对String类型的操作命令

    写在前面的话:读书破万卷,编码如有神 -------------------------------------------------------------------- ------------ ...

  7. Java中关于String类型的一些思考

    作为初学者在学习Java的时候,变量类型是不可避免会遇到的,在以往我们的印象中字符串String都是作为基本类型而存在的,但是在Java中String类型确是一个实实在在的引用类型,是可以通过new关 ...

  8. Javascript中的string类型使用UTF-16编码

    2019独角兽企业重金招聘Python工程师标准>>> 在JavaScript中,所有的string类型(或者被称为DOMString)都是使用UTF-16编码的. MDN DOMS ...

  9. Redis中一个String类型引发的惨案

    ​      曾经看到这么一个案例,有一个团队需要开发一个图片存储系统,要求这个系统能快速记录图片ID和图片存储对象ID,同时还需要能够根据图片的ID快速找到图片存储对象ID.我们假设用10位数来表示 ...

随机推荐

  1. GoogLeNetv1 论文研读笔记

    Going deeper with convolutions 原文链接 摘要 研究提出了一个名为"Inception"的深度卷积神经网结构,其目标是将分类.识别ILSVRC14数据 ...

  2. 并发编程——ConcurrentHashMap#addCount() 分析

    前言 ConcurrentHashMap 精华代码很多,前面分析了 helpTransfer 和 transfer 和 putVal 方法,今天来分析一下 addCount 方法,该方法会在 putV ...

  3. Git 使用SSH密钥操作

    git使用ssh密钥 git支持https和git两种传输协议,github分享链接时会有两种协议可选: git协议链接图例 : ↓ https协议链接图例:↓ git使用https协议,每次pull ...

  4. Java“毒丸”使用示例,实现取消任务

    一.简介 在Java并发编程中,“毒丸”指的是将一个对象放在队列当中,当得到这个对象的时候立即停止执行 下面是一个使用“毒丸”来取消任务的一个示例 如图所示,我们假设一个任务从开始到结束需要经历4个步 ...

  5. javaBean分析

    package com.ldf.domain; /** * 实体bean */ import java.io.Serializable; import java.util.Date; public c ...

  6. Random类的常用方法

    1.nextBoolean(): 随机返回true或false 2.nextInt(int bound): 随机返回0到bound之间的整数(不包括bound) 如:nextInt(10)返回0-9之 ...

  7. 【代码笔记】iOS-MBProgressHUD

    一,工程图. 二,代码. AppDelegate.h #import <UIKit/UIKit.h> #import "MBProgressHUD.h" @interf ...

  8. 常用,好用的js代码

    记录看到或者用到的js代码,长期更新! 判断是否是正整数 (number-0)|0 !== number-0 解析: number-0 转换成数字,再通过位移运算(|)判断是否跟原数字相等 安全检查j ...

  9. Hadoop大数据初入门----haddop伪分布式安装

    一.hadoop解决了什么问题 hdfs 解决了海量数据的分布式存储,高可靠,易扩展,高吞吐量mapreduce 解决了海量数据的分析处理,通用性强,易开发,健壮性 yarn 解决了资源管理调度 二. ...

  10. nginx禁止ip默认参数是$remote_addr无法禁止真实ip的问题

    由于网站使用了cdn所以$remote_addr获取的ip是cdn的ip,我现在先禁止某些ip访问发现无法禁止cdn传递过来的客户端的ip也就是$http_x_forwarded_for这个参数.比如 ...