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

C++ 学习系列 -- string 实现

string是C++标准库的重要部分,主要用于字符串处理。这里我们自己实现一个简单版本的 string.

一   思路

string 类中应该包含如下:

1. 类成员变量:char* m_data,利用 char* 指针存放字符串

2. 成员函数:

   2.1   size(), 用于返回字符串的长度,不包含字符 '\0'

   2.2  operator[](index) ,返回字符串中任意位置的字符

   2.3  c_str()  ,将 my_string  转为 char*,并返回 

二  具体实现

// my_string.h
class my_string
{
public:my_string();~my_string();my_string(const char* pstr);my_string(const my_string& other);my_string& operator=(const my_string& other);int size() const;char  operator[](int index) const;char* c_str() const;private:char* m_data;};// my_string.cpp
#include "my_string.h"
#include<string.h>
#include<stdio.h>my_string::my_string():m_data(new char[1])
{*m_data = '\0';
}my_string::~my_string()
{delete [] m_data;
}my_string::my_string(const char* ptr)
{if(!ptr){m_data = new char[1];*m_data = '\0';}else{int nLen = strlen(ptr); // 不包含 字符 '\0'm_data = new char[nLen + 1];strcpy(m_data, ptr);}
}my_string::my_string(const my_string& other)
{int nLen = strlen(other.m_data);m_data = new char[nLen + 1];strcpy(m_data, other.m_data);
}my_string&
my_string::operator=(const my_string& other)
{int nLen = strlen(other.m_data);m_data = new char[nLen+1];strcpy(m_data, other.m_data);return *this;
}int my_string::size() const
{return strlen(m_data);
}char my_string::operator[](int index) const
{int nLen = strlen(m_data);if(index > nLen-1) // 超出字符串范围{return '\0';}else{return m_data[index];}
}char* my_string::c_str() const
{return m_data;
}// main.cpp
void testMyString()
{my_string str("abc");std::cout << str.size() << std::endl;my_string s2 = str;std::cout << str.size() << std::endl;std::cout << s2.c_str() << std::endl;}int main()
{testMyString();return 0;
}

相关文章:

C++ 学习系列 -- string 实现

string是C标准库的重要部分&#xff0c;主要用于字符串处理。这里我们自己实现一个简单版本的 string. 一 思路 string 类中应该包含如下&#xff1a; 1. 类成员变量&#xff1a;char* m_data&#xff0c;利用 char* 指针存放字符串 2. 成员函数&#xff1a; 2.1 size(…...

C语言小练习(三)

&#x1f31e; “也许你感觉自己与周遭格格不入&#xff0c;但正是那些你一人度过的时光&#xff0c;让你变得越来越有意思&#xff0c;等有天别人终于注意到你的时候&#xff0c;他们就会发现一个比他们想象中更酷的人。”-《生活大爆炸》 Day03 &#x1f4dd; 一.选择题&…...

2023 js逆向爬虫 有道翻译 代码

前置条件&#xff1a;nodejs环境、安装 crypto 和 python3环境 js.js文件&#xff1a; const crypto require("crypto")function decode(resp_data) {g_o ydsecret://query/key/B*RGygVywfNBwpmBaZg*WT7SIOUP2T0C9WHMZN39j^DAdaZhAnxvGcCY6VYFwnHlg_n ydsecre…...

【物联网无线通信技术】NFC从理论到实践(FM17XX)

NFC&#xff0c;全称是Near Field Communication&#xff0c;即“近场通信”&#xff0c;也叫“近距离无线通信”。NFC诞生于2004年&#xff0c;是基于RFID非接触式射频识别技术演变而来&#xff0c;由当时的龙头企业NXP(原飞利浦半导体)、诺基亚以及索尼联合发起。NFC采用13.5…...

Python爬虫猿人学逆向系列——第六题

题目&#xff1a;采集全部5页的彩票数据&#xff0c;计算全部中奖的总金额&#xff08;包含一、二、三等奖&#xff09; 地址&#xff1a;https://match.yuanrenxue.cn/match/6 本题比较简单&#xff0c;只是容易踩坑。话不多说请看分析。 两个参数&#xff0c;一个m一个f&…...

idea使用tomcat

1. 建立javaweb项目 2. /WEB-INF/web.xml项目配置文件 如果javaweb项目 先建立项目&#xff0c;然后在项目上添加框架支持&#xff0c;选择javaee 3. 项目结构 4.执行测试&#xff1a;...

搭建Tomcat HTTP服务:在Windows上实现外网远程访问的详细配置与设置教程

文章目录 前言1.本地Tomcat网页搭建1.1 Tomcat安装1.2 配置环境变量1.3 环境配置1.4 Tomcat运行测试1.5 Cpolar安装和注册 2.本地网页发布2.1.Cpolar云端设置2.2 Cpolar本地设置 3.公网访问测试4.结语 前言 Tomcat作为一个轻量级的服务器&#xff0c;不仅名字很有趣&#xff0…...

Java学习笔记——继承(包括this,super的使用总结)

继承&#xff1a; 使用情景&#xff1a;当类与类之间&#xff0c;存在相同&#xff08;共性&#xff09;的内容&#xff0c;并满足子类是父类的一种&#xff0c;就可以考虑使用继承&#xff0c;来优化代码 Java中提供一个关键字extends&#xff0c;用这个关键字&#xff0c;我…...

Android 获取应用sha1和sha256

在 Android 应用开发中&#xff0c;SHA-1&#xff08;Secure Hash Algorithm 1&#xff09;值是一种哈希算法&#xff0c;常用于生成应用的数字签名。这个数字签名用于验证应用的身份&#xff0c;并确保应用在发布到设备上时没有被篡改。 以下是生成 Android 应用的 SHA-1 值的…...

c# 方法参数修饰符(out、ref、in)的区别

在C#中&#xff0c;ref、out和in是三种方法参数修饰符&#xff0c;它们在传递参数的方式和作用上有所不同。 ref修饰符&#xff1a; 传递方式&#xff1a;使用ref修饰符的参数可以是输入输出参数&#xff0c;即在方法调用前后都可以对其进行修改。 作用&#xff1a;通过ref修…...

shell 编写一个带有进度条的程序安装脚本

需求 使用 shell 写一个 软件安装脚本&#xff0c;带有进度条 示例 #!/bin/bash# 模拟软件安装的步骤列表 steps("解压文件" "安装依赖" "配置设置" "复制文件" "")# 计算总步骤数 total_steps${#steps[]}# 安装进度的初…...

服务器数据恢复-AIX PV完整镜像方法以及误删LV的数据恢复方案

AIX中的PV相当于物理磁盘&#xff08;针对于存储来说&#xff0c;PV相当于存储映射过来的卷&#xff1b;针对操作系统来说&#xff0c;PV相当于物理硬盘&#xff09;&#xff0c;若干个PV组成一个VG&#xff0c;AIX可以将容量不同的存储空间组合起来统一分配。AIX把同一个VG的所…...

首席执行官Adam Selipsky解读“亚马逊云科技的技术产品差异化”

迄今为止&#xff0c;亚马逊云科技已经参与了21世纪几乎所有的大型计算变革&#xff0c;亚马逊云科技是一个很传奇的故事&#xff0c;它始于大约20年前的一项实验&#xff0c;当时亚马逊试图出售其过剩的服务器。人们确实对此表示怀疑。为什么在线书店试图销售云服务&#xff1…...

C++ Day3

目录 一、类 【1】类 【2】应用实例 练习&#xff1a; 【3】封装 二、this指针 【1】this指针的格式 【2】必须使用this指针的场合 三、类中的特殊成员函数 【1】构造函数 i&#xff09;功能 ii&#xff09;格式 iii&#xff09;构造函数的调用时机 iv&#xff09;…...

OpenEuler 安装mysql

下载安装包 建议直接使用在openEuler官方编译移植过的mysql-5.7.21系列软件包 参考&#xff1a;操作系统迁移实战之在openEuler上部署MySQL数据库 | 数据库迁移方案 | openEuler社区官网 MySQL 5.7.21 移植指南&#xff08;openEuler 20.03 LTS SP1&#xff09; | 数据库移植…...

[Docker] Windows 下基于WSL2 安装

Docker 必须部署在 Linux 内核的系统上。如果其他系统想部署 Docker 就必须安装一个虚拟 Linux 环境。 1. 开启虚拟化 进入系统BIOS&#xff08;AMD 为 SVM&#xff1b;Intel 为 Intel-vt&#xff09;改为启用(enable) 2. 开启WSL 系统设置->应用->程序和功能->…...

(未完成)【Spring专题】SringAOP底层原理解析——阶段三(AOP)

目录 前言前置知识代理范式SpringAOP的理解Spring动态代理的实现 课程内容一、动态代理的实现1.1 Cglib动态代理1.2 JDK动态代理1.3 ProxyFactory&#xff1a;Spring对两种代理的封装 二、AOP基础知识AOP基础概念回顾通知Advice的分类Advisor的理解 三、创建代理对象的方式3.1 …...

使用Nodejs创建简单的HTTP服务器,借助内网穿透工具实现公网访问的方法分享

文章目录 前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口 5.固定公网地址 前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff0…...

使用 OpenTelemetry 构建可观测性 03 - 导出

上一个博文中&#xff0c;我提到如何使用 OpenTelemery 的特定语言 API 来收集遥测数据&#xff0c;包含手动和自动的埋点技术&#xff0c;这很重要&#xff01;但是&#xff0c;收集遥测数据只是解决方案的第一步。 你需要把遥测数据路由转发到其他地方&#xff0c;同时添加额…...

Pyqt5打开电脑摄像头进行拍照

目录 1、设计UI界面 2、设计逻辑代码&#xff0c;建立连接显示窗口 3、结果 1、设计UI界面 将ui界面转为py文件后获得的逻辑代码为&#xff1a;&#xff08;文件名为 Camera.py&#xff09; # -*- coding: utf-8 -*-# Form implementation generated from reading ui file …...

OpenClaw+GLM-4.7-Flash:个人财务助手实践

OpenClawGLM-4.7-Flash&#xff1a;个人财务助手实践 1. 为什么需要本地化财务助手 去年整理年度账单时&#xff0c;我对着十几个Excel表格和银行导出的PDF文件发呆——这些数据分散在不同平台&#xff0c;格式混乱&#xff0c;分类标准不统一。更让我犹豫的是&#xff0c;有…...

从‘量子电子商务’到三方协议:手把手拆解量子数字签名(QDS)的核心流程与实验挑战

量子数字签名&#xff1a;从理论到实验的技术深潜与挑战解析 量子数字签名&#xff08;QDS&#xff09;作为后量子密码学的重要分支&#xff0c;正在从实验室走向实际应用。不同于传统数字签名依赖数学难题的复杂性&#xff0c;QDS基于量子力学的基本原理&#xff0c;为信息安全…...

别再死磕Open SQL了!用ABAP CDS View在SAP S/4HANA里榨干数据库性能

别再死磕Open SQL了&#xff01;用ABAP CDS View在SAP S/4HANA里榨干数据库性能 每次看到那些运行了20分钟还没出结果的报表程序&#xff0c;我就忍不住想问问开发者&#xff1a;2023年了&#xff0c;为什么还在用Open SQL写这种性能灾难&#xff1f;上周我接手了一个供应商账龄…...

【问题】cursor无法识别python包

目录 问题描述解决方法 问题描述 pip install -e .安装的python可以正常导入&#xff0c;不报错&#xff0c;但cursor无法跳转&#xff0c;这应该怎么修复呢&#xff1f; 解决方法 在cursor的打开目录中新建pyrightconfig.json&#xff0c;填入extraPaths路径&#xff0c; …...

计算机毕设 java 基于 BS 架构的实验室开放管理系统 java 基于 B/S 架构的实验室预约管理系统 java 基于 B/S 架构的智能实验室管理系统

计算机毕设 java 基于 BS 架构的实验室开放管理系统 t780o9&#xff08;配套有源码 程序 mysql 数据库 论文&#xff09;本套源码可以先看具体功能演示视频领取&#xff0c;文末有联 xi 可分享当今社会已步入科技进步与经济快速发展的新时期&#xff0c;计算机技术对各领域的影…...

全面解析数据库锁机制:从行锁到死锁的深度剖析

锁是数据库并发控制的核心机制&#xff0c;也是面试中绕不开的高频考点。很多开发者对锁的理解停留在“加锁就行了”&#xff0c;但遇到死锁、锁等待超时、性能骤降等问题时往往束手无策。本文将系统讲解数据库锁的分类、实现原理、锁与事务隔离级别的关系&#xff0c;并结合 M…...

超图神经网络(HGNN)实战:从多模态数据构建到节点特征提取

超图神经网络实战&#xff1a;多模态数据融合与节点特征提取全流程解析 在电商推荐系统中&#xff0c;我们常常需要同时处理用户行为日志、商品图像和评论文本——这三种异构数据如何统一建模&#xff1f;传统图神经网络&#xff08;GNN&#xff09;在处理这类多模态关联时往往…...

AI产品经理崛起:技术人转型的新风口

技术浪潮下的职业新机遇人工智能&#xff08;AI&#xff09;技术的爆炸式发展正重塑全球产业格局&#xff0c;催生出一系列新兴职业。其中&#xff0c;AI产品经理&#xff08;AI PM&#xff09;作为连接技术与商业的桥梁&#xff0c;已成为当下最炙手可热的岗位。数据显示&…...

5个步骤快速搭建医院信息系统:终极医疗数字化解决方案

5个步骤快速搭建医院信息系统&#xff1a;终极医疗数字化解决方案 【免费下载链接】HIS ZainZhao/HIS: HIS 通常代表医疗信息系统&#xff08;Hospital Information System&#xff09;&#xff0c;但此链接指向的具体项目信息未知&#xff0c;可能是某个开发者设计或维护的医院…...

DeOldify图像上色服务性能调优:针对STM32嵌入式设备输出的图像优化

DeOldify图像上色服务性能调优&#xff1a;针对STM32嵌入式设备输出的图像优化 你有没有想过&#xff0c;把家里那些泛黄的老照片&#xff0c;用AI技术一键上色后&#xff0c;直接显示在复古的电子相框里&#xff1f;这个想法听起来很酷&#xff0c;但实际操作起来&#xff0c…...