// ShStringNew.cpp : 定义控制台应用程序的入口点。
// #include "stdafx.h"
#include<iostream>
#include<iomanip>
using namespace std;
class SHString
{ public:
SHString(const char* Str = "")
:mStr(new char[strlen(Str) + 1])
{
strcpy(mStr, Str);
}
SHString(const SHString& Str)
:mStr(new char[strlen(Str.mStr) + 1])
{
strcpy(mStr, Str.mStr);
}
SHString& operator=(const char* Str)
{
delete[] mStr;
mStr = new char[strlen(Str) + 1];
strcpy(mStr, Str);
return *this;
}
SHString& operator=(const SHString& Str)
{
if (this != &Str)
{
delete[]mStr;
mStr = new char[strlen(Str.mStr) + 1];
strcpy(mStr, Str.mStr);
}
return *this;
}
~SHString()
{
delete[]mStr;
mStr = NULL;
} public:
char* mStr;
friend ostream& operator<<(ostream& os, SHString& S);
friend istream& operator >> (istream&, SHString& S);
SHString operator+(const SHString &other); //operator+ }; //因为模拟实现的string不是内置类型,所以要重载输出运算符,才能输出String类对象的内容
ostream& operator<<(ostream& os, SHString& Str)
{
os << Str.mStr;
return os;
} istream &operator >> (istream &input, SHString &s)
{
char temp[255]; //用于存储输入流
input >> setw(255) >> temp;
s = temp; //使用赋值运算符
return input; //使用return可以支持连续使用>>运算符
} inline SHString SHString::operator+(const SHString &other)
{
SHString NewString; NewString.mStr = new char[strlen(mStr) + strlen(other.mStr) + 1];
strcpy(NewString.mStr, mStr);
strcat(NewString.mStr, other.mStr); return NewString;
}
int main()
{
SHString Str1("abcdef");
SHString Str2("ABCDEF");
SHString Str3(Str1);
SHString Str4,Str5,Str6;
Str4 = Str1;
char* v1 = "123";
Str5 = v1;
Str6 = Str4 + Str5;
cout << "Str1->" << Str1 << endl;
cout << "Str2->" << Str2 << endl;
cout << "Str3->" << Str3 << endl;
cout << "Str4->" << Str4 << endl;
cout << "Str5->" << Str5 << endl;
cout << "Str6->" << Str6 << endl;
return 0;
}

  

自定义String的更多相关文章

  1. C++自定义String字符串类,支持子串搜索

    C++自定义String字符串类 实现了各种基本操作,包括重载+号实现String的拼接 findSubStr函数,也就是寻找目标串在String中的位置,用到了KMP字符串搜索算法. #includ ...

  2. C++基础 (5) 第五天 重载new delete () 只能操作符 自定义string类

    1 昨日回顾 1.static 对整个类共享 可以直接用 类::方法 调用 如果是私有的 可以提供一个静态的访问静态成员的方法 2 自定义的数组类-重载操作符[] 3 重载new和delete 4 重 ...

  3. 自定义String类,并且实现在STL容器中添加自定义的类型

    13.44 编写标准库string类的简化版本,命名String.你的类应该至少有一个默认构造函数和一个接受C风格字符串指针参数的构造函数.使用allocator为你的String类分配所需内存. 1 ...

  4. 自定义string类

    #include <iostream> #include <cstring> using namespace std; class String; class Data{ // ...

  5. JVM类加载器是否可以加载自定义的String

    前言 曾经有一次,面试官问到类加载机制,相信大多数小伙伴都可以答上来双亲委派机制,也都知道JVM出于安全性的考虑,全限定类名相同的String是不能被加载的.但是如果加载了,会出现什么样的结果呢?异常 ...

  6. C# String.Format大全

    C# String.Format大全 ? ? ? 十进制的数字 ? ? string.Format("{0:D3}",23) 023 格式化十进制的数字 string.Format ...

  7. 使用引用计数和copy-on_write实现String类

    本文写于2017-01-18,从老账号迁移到本账号,原文地址:https://www.cnblogs.com/huangweiyang/p/6295420.html 这算是我开始复习的内容吧,关于st ...

  8. 【Java面试题】53 能不能自己写个类,也叫java.lang.String?

    可以,但是即使你写了这个类,也没有用. 这个问题涉及到加载器的委托机制,在类加载器的结构图(在下面)中,BootStrap是顶层父类,ExtClassLoader是BootStrap类的子类,ExtC ...

  9. 一道前端面试题:定义一个方法将string的每个字符串间加个空格返回,调用的方式'hello world'.spacify();

    偶然在群里看到了这道题:定义一个方法将string的每个字符串间加个空格返回,调用的方式'hello world'.spacify(); 这道题主要是对JavaScript对象原型的考察.

随机推荐

  1. 中心极限定理 | central limit theorem | 大数定律 | law of large numbers

    每个大学教材上都会提到这个定理,枯燥地给出了定义和公式,并没有解释来龙去脉,导致大多数人望而生畏,并没有理解它的美. <女士品茶>有感 待续~ 参考:怎样理解和区分中心极限定理与大数定律?

  2. 【转载】MacOS下IntelliJ IDEA关联JDK1.8源码

    原文地址: MacOS下IntelliJ IDEA关联JDK1.8源码 1 打开jdk设置,找到具体添加的地方 2 找到自己jdk的源码位置替换掉 3 如果没有源码或者源码没有下载解压,自己下载解压, ...

  3. 搭建智能合约开发环境Remix IDE及使用

    目前开发智能的IDE, 首推还是Remix, 而Remix官网, 总是由于各种各样的(网络)原因无法使用,本文就来介绍一下如何在本地搭建智能合约开发环境remix-ide并介绍Remix的使用. 写在 ...

  4. vue 基础(一)

    一 vue.js的M-V-VM思想 MVVM 是Model-View-ViewModel 的缩写,它是一种基于前端开发的架构模式. 1.Model指代的就是vue对象的data属性里面的数据.这里的数 ...

  5. python:字典嵌套列表

    Python的字典{ }以键值对的形式保存数据,可以以键来访问字典中保存的值而不能用下标访问.字典中几乎可以包含任意的变量,字典,数列,元组.数列也一样. python的列表[ ]与字典不同,列表通过 ...

  6. Cron 表达式详解(已整理、很清晰)

    Cron表达式是一个字符串,字符串分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式: Seconds Minutes Hours DayofMonth Month DayofWeek ...

  7. 『PyTorch』第二弹_张量

    参考:http://www.jianshu.com/p/5ae644748f21# 几个数学概念: 标量(Scalar)是只有大小,没有方向的量,如1,2,3等 向量(Vector)是有大小和方向的量 ...

  8. python获取文件路径、文件名、后缀名的实例

    def jwkj_get_filePath_fileName_fileExt(filename): (filepath,tempfilename) = os.path.split(filename); ...

  9. sqlite3 删除数据

    cx = sqlite3.connect("c:/数据库地址") # 打开数据库cu = cx.cursor()# delete the rowcu.execute("d ...

  10. python 首次安装 报错

    最近python很火,想在空余时间学习一波,但是安装完Python后运行发现居然报错了,错误代码是0xc000007b,于是通过往上查找发现是因为首次安装Python缺乏VC++库的原因 错误提示如下 ...