### 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
C语言去除相邻重复字符函数的实现方法 字符去重函数 功能:去重字符串相邻重复的字符,不相邻的不用去重 参数: arg1 — 输入字符串 arg2 — 字符串开始位置 arg3 — 字符串结束位置 要求: 输入参数为arg1时, 对这个字符串去重 输入参数为arg1,arg2时, 从arg2位置到字符串结束,去重 输入参数为arg1,arg2,arg3时,从arg2到arg3位置,去重 src/include/catalog/pg_proc.h DATA(insert OID = 6669 ( remove_dup_char PGNSP PGUID 12 1 0 0 0 f f f f
2024-05-12 12:42:31 46KB char char函数 cstring
1
本文实例为大家分享了MFC实现学生选课系统的具体代码,供大家参考,具体内容如下 先上效果图: 主要功能: 输入学号,从数据库中查找学号,若找到相匹配的学号,则显示数据库中姓名、学历、导师,同时将所有可选课程显示出来。输入课程类型和课程名称查询课程进行选课,选课之后相应的选课门数、学分、学费、已选门数都会进行刷新。换个学号输入,选课总人数就会刷新,还有一些小功能就在代码里解释了。 我就只把按键的代码贴出来,完整工程下面有链接。 “确认输入”按键: void Cversion02Dlg::OnBnClickedButton1() { UpdateData(true); printm
2023-02-07 16:41:16 122KB cstring mfc 系统
1
实例016——CString字符串的类型转换
2023-01-16 22:04:20 57KB 十六进制转十进制
1
由于工作需要传数据到mes上,客户的dll是用C#写的,我这边工程是C++的,然后自己就写了个小demo链接C#的dll当做测试。如果有用到就拿去吧。有CString 转String^的使用方法,如何实现C++调用C#dll
2022-12-06 17:04:07 26.15MB C++链接C#dll CString转String^
1
函数功能:将CString类型转换为char *类型,纯手打函数 参数: 1:CString类型变量 返回值 :char *类型指针 备 注:主要是因为MFC中默认使用的是Unicode字符集而不是多字节字符集,使用一般的C++函数转换会有问题
2022-07-27 15:17:29 3KB C++ CString 类型 转换
1
C语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CSTRINGC语言头文件 CST
2022-06-11 15:05:24 336B C语言头文件CSTRING
代码如下:// FileName: BrowsHistory.h // ————————————————————————————————————————// Remarks://   BrowsHistory对象应该设置成全局,或者静态;防止还没有获取完网址,对象就析构了;// ———————————————————————————————————————— #pragma once#include #include #include #include struct BrowsData{public:    /
2022-06-06 20:51:34 127KB “人造太阳”计划 cstring hr
1
CString转UTF8,UTF8转CString
2022-05-25 15:51:00 1KB CString转UTF8 MFC UTF
1
使用CString在UTF8和UTF16之间转换。
2022-05-07 18:19:32 40KB VC7.1 VC8.0 C++ VC7.0
1