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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
网站不错 人气很旺了 加油
[***.192.178.218]2024年04月23日 21时25分01秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
使用匿名内部类创建线程
2019-05-01
多线程五种状态
2019-05-01
守护线程与非守护线程
2019-05-01
join方法介绍
2019-05-01
什么是多线程安全
2019-05-01
同步代码块解决线程安全
2019-05-01
threadlocal
2019-05-01
java内存模型
2019-05-01
volatile关键字
2019-05-01
HTTP_概述
2019-05-01
web相关概念回顾
2019-05-01
web服务器软件_概述
2019-05-01
tomcat_安装&卸载&启动
2019-05-01
tomcat_启动问题分析
2021-07-04
tomcat_关闭
2019-05-01
tomcat_部署项目的方式
2019-05-01
tomcat_动态java项目的目录结构
2019-05-01
Servlet_概述
2019-05-01
Servlet_快速入门
2019-05-01
Servlet_执行原理
2019-05-01