simple string class
发布日期:2021-06-30 22:07:53 浏览次数:3 分类:技术文章

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

/// @file exam_1_1.cpp/// @brief /**1. 完成一个字符串类, 操作变长字符串class CMyString  {private:char* m_lpString;int   m_nLen;int   m_nSpaceLen;};*/#include 
#include
using namespace std;#include "MyString.h"void fnTestString();void clear_cin();int main(int argc, char** argv, char** envp){ fnTestString(); cout << "END, press any key to quit" << endl; clear_cin(); getchar(); return 0;}void fnTestString(){ CMyString str1; CMyString str2; CMyString str3; CMyString str4; CMyString str5; str1 = CMyString("Hello"); str1.strcpy(" world"); cout << str1.getString() << endl; str2 = str1; str2.strcat(" c++"); cout << str2.getString() << endl; str1.setString("hello c++"); cout << str1.getString() << endl; str3.strcpy("test strcpy"); cout << str3.getString() << endl; str4.strcat("test strcat"); cout << str4.getString() << endl; cout << str5.getString() << endl;}void clear_cin(){ cin.clear(); cin.sync();}

// MyString.h: interface for the CMyString class.////#if !defined(AFX_MYSTRING_H__F5118BD7_4C05_47F1_AD8E_D18B1F44B0CA__INCLUDED_)#define AFX_MYSTRING_H__F5118BD7_4C05_47F1_AD8E_D18B1F44B0CA__INCLUDED_#if _MSC_VER > 1000#pragma once#endif // _MSC_VER > 1000#ifndef NULL#define NULL 0#endif#ifndef SAFE_DELETE    #define SAFE_DELETE(x) \    { \        if (NULL != (x)) \        { \        delete (x); \        (x) = NULL; \        } \    }#endif // #ifndef SAFE_DELETE#ifndef SAFE_DELETE_ARY    #define SAFE_DELETE_ARY(x) \    { \        if (NULL != (x)) \        { \        delete[] (x); \        (x) = NULL; \        } \    }#endif // #ifndef SAFE_DELETE_ARYclass CMyString  {public:	CMyString();	virtual ~CMyString();    // copy construct function    CMyString(CMyString& src);    CMyString(CMyString* psrc);    CMyString(const char* psrc);    CMyString& operator = (const CMyString& src);    // member method    void setString(const char* pSrc);    const char* getString() const;    void strcpy(const char* pSrc);    void strcat(const char* pSrc);private:    void init();    void uninit();    // member dataprivate:    char* m_lpString; ///< 开辟(new)的字符串缓冲区    int   m_nLen; ///< 字符串长度    /// 如果最终要操作的字符串比缓冲区小, 就不用另外再开辟缓冲区了    int   m_nSpaceLen; ///< 缓冲区总长度};#endif // !defined(AFX_MYSTRING_H__F5118BD7_4C05_47F1_AD8E_D18B1F44B0CA__INCLUDED_)
// MyString.cpp: implementation of the CMyString class.////#include 
#include
#include "MyString.h"//// Construction/Destruction//CMyString::CMyString(){ init();}CMyString::CMyString(CMyString& src){ init(); this->strcpy(src.getString());}CMyString::CMyString(CMyString* psrc){ init(); if (NULL != psrc) { this->strcpy(psrc->getString()); }}CMyString::CMyString(const char* psrc){ init(); this->strcpy(psrc);}CMyString& CMyString::operator = (const CMyString& src){ this->strcpy(src.getString()); return *this;}void CMyString::setString(const char* pSrc){ this->strcpy(pSrc);}const char* CMyString::getString() const{ if (NULL == m_lpString) { return ""; } else { return m_lpString; }}void CMyString::strcpy(const char* pSrc){ int iLenNew = 0; char* pNewString = NULL; if (NULL == pSrc) { return; } iLenNew = ::strlen(pSrc); if (iLenNew > (m_nSpaceLen - 1)) { pNewString = new char[iLenNew + 1]; _ASSERT(NULL != pNewString); pNewString[0] = '\0'; ::strcpy(pNewString, pSrc); SAFE_DELETE_ARY(m_lpString); m_nLen = iLenNew; m_nSpaceLen = m_nLen + 1; m_lpString = pNewString; } else { m_nLen = strlen(pSrc); _ASSERT(NULL != m_lpString); ::strcpy(m_lpString, pSrc); }}void CMyString::strcat(const char* pSrc){ int iLenNew = 0; char* pNewString = NULL; if (NULL == pSrc) { return; } if (NULL == m_lpString) { this->strcpy(pSrc); return; } iLenNew = m_nLen + strlen(pSrc); if (iLenNew > (m_nSpaceLen - 1)) { pNewString = new char[iLenNew + 1]; pNewString[0] = '\0'; ::strcpy(pNewString, m_lpString); SAFE_DELETE_ARY(m_lpString); ::strcat(pNewString, pSrc); m_nLen = iLenNew; m_nSpaceLen = m_nLen + 1; m_lpString = pNewString; } else { m_nLen += strlen(pSrc); ::strcat(m_lpString, pSrc); }}CMyString::~CMyString(){ uninit();}void CMyString::init(){ m_lpString = NULL; m_nLen = 0; m_nSpaceLen = 0;}void CMyString::uninit(){ if (NULL != m_lpString) { SAFE_DELETE_ARY(m_lpString); }}

转载地址:https://lostspeed.blog.csdn.net/article/details/50302209 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:time opt
下一篇:new对象数组时的内存布局

发表评论

最新留言

网站不错 人气很旺了 加油
[***.192.178.218]2024年04月23日 21时25分01秒

关于作者

    喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!

推荐文章