### C++ 实现 CString 类详解 #### 一、概述 在C++中,字符串操作是一项基本且重要的功能。本文档将详细介绍如何使用C++来实现一个详尽的`CString`类,该类提供了多种字符串处理功能,如创建、复制、连接、截取等。 #### 二、类结构与成员变量 `CString`类主要包括以下成员变量: - `char *m_pStr`: 指向字符串的指针。 - `int m_len`: 字符串长度。 #### 三、构造与析构函数 1. **默认构造函数**: ```cpp CString::CString() { m_pStr = NULL; m_len = 0; } ``` - **功能**: 初始化一个新的`CString`对象,其初始状态为空字符串。 2. **带参数构造函数**: ```cpp CString::CString(char *p) { m_pStr = new char[strlen(p) + 1]; strncpy(m_pStr, p, strlen(p) + 1); m_len = strlen(p); } ``` - **功能**: 使用指定的字符数组初始化`CString`对象。 - **参数**: `char *p`为待初始化的字符数组。 3. **拷贝构造函数**: ```cpp CString::CString(CString &c) { m_pStr = new char[strlen(c.GetStr()) + 1]; strncpy(m_pStr, c.GetStr(), strlen(c.GetStr()) + 1); m_len = strlen(c.GetStr()); } ``` - **功能**: 创建一个新对象,作为另一个`CString`对象的副本。 - **参数**: `CString &c`为待拷贝的`CString`对象。 4. **析构函数**: ```cpp CString::~CString() {} ``` - **功能**: 析构函数未具体实现删除内存的功能,实际应用中应释放分配的内存资源。 #### 四、成员函数 1. **获取字符串方法**: ```cpp const char *CString::GetStr() { return m_pStr; } ``` - **功能**: 返回当前`CString`对象所包含的字符串。 2. **获取长度方法**: ```cpp int CString::GetLength() { return m_len; } ``` - **功能**: 返回当前字符串的长度。 3. **赋值运算符重载**: ```cpp CString& CString::operator=(const CString &m) { if (&m == this) return *this; if (0 != m_len) { delete m_pStr; } m_pStr = new char[m.m_len]; m_len = m.m_len; for (int i = 0; i < m_len; i++) { this->m_pStr[i] = m.m_pStr[i]; } m_pStr[i] = '\0'; return *this; } ``` - **功能**: 实现了`=`运算符重载,用于对两个`CString`对象进行赋值操作。 - **参数**: `const CString &m`为待赋值的`CString`对象。 4. **字符串连接运算符重载**: ```cpp CString CString::operator+(CString &m) { int len = m.GetLength(); CString *tem; tem->m_len = len + m_len + 1; tem->m_pStr = new char[len + m_len + 1]; strncpy(tem->m_pStr, this->m_pStr, len); strcat(tem->m_pStr, m.GetStr()); return *tem; } ``` - **功能**: 实现了`+`运算符重载,用于连接两个`CString`对象。 - **参数**: `CString &m`为待连接的`CString`对象。 5. **字符串追加运算符重载**: ```cpp CString& CString::operator+=(CString &m) { int len = m.GetLength(); char *temp = NULL; if (this->m_len > strlen(this->m_pStr) + len + 1) { strcat(this->m_pStr, m.m_pStr); return *this; } temp = new char[len + m_len + 1]; strcpy(temp, this->m_pStr); strcat(temp, m.m_pStr); delete this->m_pStr; this->m_pStr = temp; return *this; } ``` - **功能**: 实现了`+=`运算符重载,用于将一个`CString`对象追加到另一个`CString`对象的末尾。 - **参数**: `CString &m`为待追加的`CString`对象。 6. **左截取方法**: ```cpp char *CString::Left(int len) { if (len > m_len) { len = m_len; } char *p; p = new char[len]; for (int i = 0; i < len; i++) { *(p + i) = *(m_pStr + i); } return p; } ``` - **功能**: 截取字符串的左侧部分。 - **参数**: `int len`为截取的长度。 7. **右截取方法**: ```cpp char *CString::Right(int len) { int j = 0; if (len > m_len) len = m_len; char *p; p = new char[len]; for (int i = m_len - len; i < m_len; i++) { *(p + j) = *(m_pStr + i); j++; } return p; } ``` - **功能**: 截取字符串的右侧部分。 - **参数**: `int len`为截取的长度。 #### 五、总结 本篇文档详细介绍了如何使用C++实现一个详尽的`CString`类,包括构造与析构函数、成员函数等功能模块。通过这些方法的实现,可以方便地进行字符串的创建、复制、连接、截取等操作,从而为开发人员提供了一个强大的工具包来处理字符串数据。 注意:以上代码示例仅供参考,实际应用时还需根据具体情况调整和完善。
2025-06-02 07:34:23 8KB CString
1
昨天师兄又出了道测试题,让我们实现类似于string类的没有MyString类,刚开始很头疼,可是真正在自己写代码的时候又很兴奋的发现,这个过程真的是个很宝贵的机会,让我又有机会可以很好的熟悉回顾C++的很多知识—类设计,构造析构函数,成员函数,友元函数,引用,重载,字符串操作,动态内存分布。。。。。于是昨天花了半天时间写了300多行代码,并认真的进行了相关测试、修改和总结。因为内容有点丰富,所以想分几次写出来,条理也清楚些。 类的空间分配:类给它的每个对象都分配了独立的空间去存储它的数据成员,所有的对象公共的访问类方法进行操作。同时在对象的独立空间中,不包括数据成员动态分配的空间,对象只是记
2023-05-18 16:55:21 82KB char char函数 const
1
主要介绍了C++中实现继承string类的MyString类的步骤,其中的要点是要实现运算符的重载,需要的朋友可以参考下
2022-12-11 23:36:15 80KB C++ string MyString 字符串
1
函数功能:将CString类型转换为char *类型,纯手打函数 参数: 1:CString类型变量 返回值 :char *类型指针 备 注:主要是因为MFC中默认使用的是Unicode字符集而不是多字节字符集,使用一般的C++函数转换会有问题
2022-07-27 15:17:29 3KB C++ CString 类型 转换
1
详解C++的String类的字符串分割实现 功能需求,输入一个字符串“1-2-3”切割出“1”、“2”、“3”。在Java下直接用String的split函数就可以了。c++下String没有直接提供这个函数,需要自己写。 网上给出的解决方案是这里的三种方法。但我是通过JNI访问的,在里面用这些vector可能不中,自己封装了个,仅供参考: String recogScop = 01-02-03; cout<<recogScop<<endl; int size = recogScop.size(); int pos = 0; string result[20] ; for(int i=
2022-05-23 23:13:44 38KB c++ IN ng
1
对string类的基本功能进行复现,找到了一些错误和c++编程中的细节问题,都在此记录下来。MyString中实现了基本的构造函数、析构函数,重载了常用符号,并且给出了一些常用函数的实现。 供大家学习参考
2022-02-14 18:02:07 36.87MB c++ string
有关String类的成员函数处理,包括运算符的重载,拷贝函数的重载,以及各类接口的实现!
2021-09-16 17:48:16 10KB C++String类
1
内容简介,涵盖内容广泛。源码实现参照STL源码。
2021-08-06 13:07:38 8KB 源码 C++ STL
1
这是我自己用c++封装的一个String类,包括基本的功能和部分常用的运算符重载等函数。
2021-06-03 19:37:34 13KB C/C++ CString String
1
C++的一般编译器都定义和封装了字符串功能,模仿定义string类的实现,可以实现并支持如下功能: (1)赋值(2)拷贝构造 (3)重载“=” (4)m.legnth() 函数测量字符串的长度 (5)m.cat(string const &)连接字符串
2021-06-01 14:01:31 481KB c++ dev
1