当前位置: 首页 > news >正文

String模拟实现的补充说明

         前文提到过String的模拟实现,这里补充一下测试效果以及整体的一个编写思路

// 测试代码

int main() {

    // 构造函数测试

    bit::string s1("Hello");

    std::cout << "s1: " << s1 << std::endl; // Hello

    // 拷贝构造

    bit::string s2(s1);

    std::cout << "s2: " << s2 << std::endl; // Hello

    // 赋值运算符

    bit::string s3;

    s3 = s1;

    std::cout << "s3: " << s3 << std::endl; // Hello

    // push_back

    s1.push_back('!');

    std::cout << "s1 after push_back: " << s1 << std::endl; // Hello!

    // operator+=

    s1 += '?';

    std::cout << "s1 after += char: " << s1 << std::endl; // Hello!?

    // append

    s1.append("World");

    std::cout << "s1 after append: " << s1 << std::endl; // Hello!?World

    // resize

    s1.resize(5);

    std::cout << "s1 after resize(5): " << s1 << std::endl; // Hello

    // 关系运算符

    bit::string s4("Apple"), s5("Banana");

    std::cout << "s4 < s5: " << (s4 < s5) << std::endl; // true

    // find

    size_t pos = s5.find('n');

    std::cout << "pos of 'n' in s5: " << pos << std::endl; 

    // insert

    s5.insert(0, "Big");

    std::cout << "s5 after insert: " << s5 << std::endl; // BigBanana

    // erase

    s5.erase(3, 3);

    std::cout << "s5 after erase: " << s5 << std::endl; // Bigana

    return 0;

}

运行结果截图:

构造/析构:


string(const char* str = "");
string(const string& s);
~string();
string& operator=(const string& s);
void swap(string& s); 

迭代器:

iterator begin();
iterator end();
const iterator begin() const;
const iterator end() const;

容量相关:

size_t size() const;
size_t capacity() const;
bool empty() const;
void reserve(size_t n);
void resize(size_t n, char c = '\0'); 

元素访问:

char& operator[](size_t index);
const char& operator[](size_t index) const;
const char* c_str() const;

 

修改操作:

void push_back(char c);
string& operator+=(char c);
void append(const char* str);
string& operator+=(const char* str);
void clear();

string& insert(size_t pos, char c);
string& insert(size_t pos, const char* str);
string& erase(size_t pos, size_t len = npos);

 

关系运算符:

bool operator<(const string& s) const;
bool operator<=(const string& s) const;
bool operator>(const string& s) const;
bool operator>=(const string& s) const;
bool operator==(const string& s) const;
bool operator!=(const string& s) const; 

查找:

size_t find(char c, size_t pos = 0) const;
size_t find(const char* s, size_t pos = 0) const; 

友元函数:

//非成员函数想直接访问私有成员

friend std::ostream& operator<<(std::ostream& os, const string& s);
friend std::istream& operator>>(std::istream& is, string& s); 

静态成员:

static const size_t npos = -1;

核心成员变量:

  • char* _str:指向堆上分配的字符数组

  • size_t _size:当前字符串长度

  • size_t _capacity:当前分配的内存容量

 

构造的实现用到strcpy,赋值采用copy-and-swap惯用法实现,关系运算符基于strcmp实现。

find基于strchr和strstr实现

http://www.dtcms.com/a/305910.html

相关文章:

  • 工业计算机ARM-如何实现工业数字化升级EC100!
  • QT跨平台应用程序开发框架(13)—— 绘图API
  • Linux设备驱动架构相关文章
  • @Scope(value = WebApplicationContext.SCOPE_REQUEST)和@Scope(“prototype“)区别
  • SQL 连接类型示例:内连接与外连接
  • 分布式系统:一致性
  • 二叉树(全)
  • InspireFace SDK gRPC 开发详细指导
  • 大厂主力双塔模型实践与线上服务
  • 嵌入式——C语言:内存管理、位运算符、构造数据类型(共用体、枚举)
  • NVIDIA Isaac平台推动医疗AI机器人发展研究
  • 【LeetCode 热题 100】33. 搜索旋转排序数组——(解法二)一次二分
  • ragflow 报错ERROR: [Errno 111] Connection refused
  • 2025年6月电子学会青少年软件编程(C语言)等级考试试卷(三级)
  • LeetCode 面试经典 150_数组/字符串_轮转数组(6_189_C++_中等)(额外数组;转置)
  • 磁盘io查看命令iostat与网络连接查看命令netstat
  • Apache HTTP Server 2.4.50 路径穿越漏洞(CVE-2021-42013)
  • 矩阵指数函数 e^A
  • AR技术赋能航空维修:精度与效率的飞跃
  • 基于Catboost的铁路交通数据分析及列车延误预测系统的设计与实现【全国城市可选、欠采样技术】
  • Three.js 与 WebXR:初识 VR/AR 开发
  • nest generate从入门到实战
  • 6.Origin2021如何绘制Y轴截断图?
  • Java 笔记 封装(Encapsulation)
  • 常见存储卡类型及对比
  • Elasticsearch 索引管理 API 实战:涵盖创建、查看、修改、删除及别名
  • 10 分钟上手 Elasticsearch 语义搜索(Serverless Cloud 本地双版本教程)
  • 在 Kubernetes 上部署 Label Studio
  • 汽车免拆诊断案例 | 免拆诊断发动机起动困难故障2例
  • Visual Studio Code 使用指南 (2025年版)