面向对象程序设计8.1——C++的字符串类

本文介绍了C++中的字符串类,包括如何创建自定义String类,实现length函数、串相等判断及相加运算符重载。此外,还探讨了C++系统提供的全局字符串操作函数如strcpy、strcmp、strlen、strcat,并详细解释了深拷贝的概念及其在对象复制中的重要性,以防止内存重复释放的问题。
摘要由CSDN通过智能技术生成

字符串类

串(字符串——由字符构成的符号串)与基本操作

  • 取串长

  • 判断两个串长是否相同

  • 取子串/取串指定位置的字符串或子串

  • 判断一个串是否包含另一个串

  • 串拼接

  • 把串中指定的片段替换掉

  • 把串中所有字母变成(大写/小写)

  • ……

创建C++的String类

#include<iostream>
class CMyString  //字符串类 
{
   
 private:
 	char *data;  //数据成员  指向字符的指针 
 public:
 	CMyString(char *buf=NULL)  //构造函数  带一个参数的指向字符的指针 
 	{
   
 		if(buf!=Null)
 		{
   
 			int len = strlen (buf);  //测量实际参数所指向的串的串长 
 			data = new char [len + 1];  //串长+1 申请字符数组 
 			strcpy( data , buf );  //把实际参数的字符数组的内容copy
			 					   //送到刚申请的字符数组data当中 
		}else{
   
			data = new char [1];
			data [0] = '\0';  //空指针,申请一个字节的空间,存放“结束符” 
		}
	}

/*	
	CMyString(CMyString &s)//拷贝构造函数
	{
		int len = strlen (s.data);
		data = new char [len+1];
		strcpy(data , s.data)
	 } 
*/

	~CMyString()  //析构函数 
	{
   
		delete data;
	 } 
}; 

length函数,求串长

int length()  //函数length 求串长
	{
   
	/*
		int k = 0;
		while( data[k] != '\0' );  //从 0号下标 到 结束符 为止 
			k++;
		return k;
	
	*/
		int k=strlen(data);
		return k;
	
	 
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
自己实现字符串 class CMStringImp; class CMstring { public: explicit CMstring(void); ~CMstring(void); CMstring(LPCTSTR lpszstr); CMstring(const CMstring& lpszstr); CMstring& operator = (const CMstring& lpszstr); operator LPCTSTR() const; bool operator == (const CMstring&) const; bool operator != (const CMstring&) const; bool operator < (const CMstring&) const; TCHAR operator[] (int nIndex) const; TCHAR& operator[] (int nIndex); CMstring& operator += (LPCTSTR pStr); CMstring& operator += (TCHAR ch); friend CMstring operator+(const CMstring& str1, const CMstring& str2); friend CMstring operator+(const CMstring& str1, LPCTSTR lpszstr); friend CMstring operator+(const CMstring& str1, TCHAR ch); friend CMstring operator+(TCHAR ch, const CMstring& str1); friend CMstring operator+(LPCTSTR lpszstr, const CMstring& str1); // friend wostream operator <<(wostream &is;,const CMstring &str;); public: LPCTSTR GetData() const; bool IsEmpty() const; TCHAR GetAt(int) const; TCHAR& GetAt(int); int GetLength() const; int Compare(const CMstring&) const; int CompareNoCase(const CMstring&) const; int Find(TCHAR ch, int nStart = 0) const; int Find(LPCTSTR pStr, int nStart = 0) const; int ReverseFind(TCHAR ch) const; int ReverseFind(LPCTSTR pStr) const; CMstring Right(int nCount) const; CMstring Left(int nCount ) const; public: CMstring& MakeLower(); CMstring& MakeUpper(); CMstring& MakeReverse(); int Replace(TCHAR chOld, TCHAR chNew); int Replace(LPCTSTR pszOld, LPCTSTR pszNew); int Insert(int iIndex, TCHAR ch); void Format(LPCTSTR lpszFormat, ...); private: CMStringImp* m_pImp; };
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值