class CMyString
{
friend std::ostream& operator<<( std::ostream& os, const CMyString& str);
private:
char* m_pData; // 私有变量保存字符串
public:
CMyString( const char* str = NULL ); // 构造函数
CMyString( const CMyString& str ); // 拷贝构造函数
~CMyString( void ); // 析构函数
CMyString& operator=( const CMyString& str ); // 赋值运算符
CMyString operator+( const CMyString& str ); // 字符串连接
bool operator==( const CMyString& str ); // 判断相等
char operator[]( int idx ); // 数组索引
int getLength(); // 返回长度
};
 CMyString::CMyString( const char* str )
{
if ( !str )
{
this->m_pData = ;
}
else
{
this->m_pData = new char[ strlen( str ) + ];
strcpy( this->m_pData, str );
}
} CMyString::CMyString( const CMyString& str )
{
if ( !str.m_pData )
{
this->m_pData = ;
}
else
{
this->m_pData = new char[ strlen( str.m_pData ) + ];
strcpy( this->m_pData, str.m_pData );
}
} CMyString::~CMyString( void )
{
if ( this->m_pData)
{
delete[] this->m_pData;
this->m_pData = ;
}
} CMyString& CMyString::operator=( const CMyString& str)
{
if ( this != &str )
{
delete[] this->m_pData;
if ( !str.m_pData )
{
this->m_pData = ;
}
else
{
this->m_pData = new char[ strlen( str.m_pData ) + ];
strcpy( this->m_pData, str.m_pData );
}
}
return *this;
} CMyString CMyString::operator+( const CMyString& str )
{
CMyString newString;
if ( !str.m_pData )
{
newString = *this;
}
else if ( !this->m_pData )
{
newString = str;
}
else
{
newString.m_pData = new char[ strlen( this->m_pData ) + strlen( str.m_pData ) + ];
strcpy( newString.m_pData, this->m_pData );
strcat( newString.m_pData, str.m_pData );
} return newString; } bool CMyString::operator==( const CMyString& str )
{
if ( strlen(this->m_pData) != strlen( str.m_pData ) )
{
return false;
}
else
{
return strcmp( this->m_pData, str.m_pData ) ? false : true;
}
} char CMyString::operator[]( int idx)
{
if ( idx > && idx < strlen( this->m_pData ) )
return this->m_pData[idx];
} int CMyString::getLength()
{
return strlen(this->m_pData);
} std::ostream& operator<<( std::ostream& os, const CMyString& str )
{
os<< str.m_pData;
return os;
}

string类实现(C++)的更多相关文章

  1. 标准库String类

    下面的程序并没有把String类的所有成员方法实现,只参考教程写了大部分重要的成员函数. [cpp] view plain copy #include<iostream> #include ...

  2. 自己实现简单的string类

    1.前言 最近看了下<C++Primer>,觉得受益匪浅.不过纸上得来终觉浅,觉知此事须躬行.今天看了类类型,书中简单实现了String类,自己以前也学过C++,不过说来惭愧,以前都是用C ...

  3. C++ string类的实现

    c++中string类的实现 今天面试被考到了, 全给忘记了!!!   //string类的实现 #include <iostream> #include <string.h> ...

  4. String类的功能

    String类              标红的为较少出现的 1.判断功能 boolean equals(Object obj) :比较字符串内容是否相同,区分大小写 boolean equalsIg ...

  5. java基础复习:final,static,以及String类

    2.final 1)为啥String是final修饰的呢? 自己答: 答案: 主要是为了“效率” 和 “安全性” 的缘故.若 String允许被继承, 由于它的高度被使用率, 可能会降低程序的性能,所 ...

  6. String类和StringBuffer类的区别

    首先,String和StringBuffer主要有2个区别: (1)String类对象为不可变对象,一旦你修改了String对象的值,隐性重新创建了一个新的对象,释放原String对象,StringB ...

  7. 05_整理String类的Length()、charAt()、 getChars()、replace()、 toUpperCase()、 toLowerCase()、trim()、toCharArray()使用说明

    Question: 整理String类的Length().charAt(). getChars().replace(). toUpperCase(). toLowerCase().trim().toC ...

  8. 标准C++中的string类的用法总结

    标准C++中的string类的用法总结 相信使用过MFC编程的朋友对CString这个类的印象应该非常深刻吧?的确,MFC中的CString类使用起来真的非常的方便好用.但是如果离开了MFC框架,还有 ...

  9. String类常用方法

    1.String类的特点,字符串一旦被初始化就不会被改变. 2.String对象定义的两种方式 ①String s = "affdf";这种定义方式是在字符串常量池中创建一个Str ...

  10. 运用String类实现一个模拟用户登录程序

    package Test; import java.util.Scanner; // 模拟用户登录程序 // 思路: // 1.用两个String类分别接收用户名和密码 // 2.判断输入的用户名和密 ...

随机推荐

  1. DP4J -- mnist

    标签(空格分隔): DeepLearning mnist mnist是一个数据集,其中包含很多手写数字的图片,每张图片都已经打上了label: Deep Learning 传统的机器学习神经网络由一层 ...

  2. c++初步实现的一个LRU

    #include<iostream>#include<map> using namespace std; typedef struct Node{ int data; stru ...

  3. 《与小卡特一起学Python》Code3 抓取网页中的某个数据

    import urllib2 file = urllib2.urlopen('http://common.cnblogs.com/script/jquery.js') message = file.r ...

  4. rxjava源码分析

    RXjava响应式编程 此文作者大暴雨原创,转载请注明出处. 如果线程的知识不是很丰富,请先查看     rxjava源码中的线程知识  一文 rxjava总结就是:异步实现主要是通过扩展观察者模式 ...

  5. Asp.net管道模型(管线模型)

    Asp.net管道模型(管线模型)   前言 为什么我会起这样的一个标题,其实我原本只想了解asp.net的管道模型而已,但在查看资料的时候遇到不明白的地方又横向地查阅了其他相关的资料,而收获比当初预 ...

  6. error: command 'cc' failed with exit status 1

    报错: Complete output from command /usr/bin/python -u -c "import setuptools, tokenize;__file__='/ ...

  7. Python 启动本地服务

    在 Linux 服务器上或安装了 Python 的机器上,Python自带了一个WEB服务器 SimpleHTTPServer,我们可以很简单的使用  python -m SimpleHTTPServ ...

  8. servlet学习笔记_4

    一.response.1.response.characterEncoding和response.setContentType("text/html;charset=UTF-8") ...

  9. CSS选择器--普通选择器

    普通选择器: 1.标签选择器:使用标签选择器,所有的相同的标签都会被选中.(如:选择div所有的div都被选中.) 2.类选择器:如果一个元素设置了多个类选择器样式,那么这些类选择器都会被设置.但是如 ...

  10. stm32串口输出丢失第一个字符的问题及原因

    因为TC和TXE 标志位在复位的时候会被置1,导致第一次没有发送. 所以在初始化串口的时候可以增加一句 USARTx->SR=0;(如 USART1->SR=0;)