C++面向对象程序设计之字符串类的相关操作

C++面向对象程序设计之字符串类的相关操作

1.实验任务与要求:
1)编写一个表示字符串的类String。
2)改写默认构造函数,生成一个空串,(不分配内存)。
3)添加一个带参数的构造函数,根据字符串常量构造一个字符串对象;String s(“HelloWorld”)。
4)在析构函数中释放内存。
5)编写拷贝构造函数和拷贝赋值函数(operator=)。(注意用深拷贝)
6)编写成员函数GetLength,返回字符串的长度。
7)编写成员函数bool GetChar(int index, char &ch),获取指定位置index处的字符,通过函数参数ch传出,如果index在合理范围内,返回true,否则返回false。
8)编写成员函数bool SetChar(int index, const char ch),把字符串位置index处的字符改变为ch,如果index在合理范围内,返回true,否则返回false。
9)编写成员函数Concat(const String &s),把字符串s拼接到当前对象表示的字符串后面,即:String a(“Hello”); String b(“World”); 则,a.Concat(b);之后,a中的内容变为”HelloWorld”。
10)编写成员函数Display,在控制台输出该字符串的内容。
11)要求:
在指定的testString.cpp中填写你的代码,不要修改main()函数。
12)提交内容包括:
A.本实验报告,请把实验报告文件名中的########替换为你的学号,XXX替换为你的姓名。
B.源代码。上述函数编写在同一个源文件中,源文件命名规则为CPP-4-########.cpp,其中########替换为你的学号。
2.把程序运行结果截图粘贴在下方:
在这里插入图片描述
3.把你完成的源文件插入到下方:

#include <iostream>
#include <cstring>
using namespace std;/*请把下面的字符串分别改为你的姓名和学号*/
const char *name = "  ";
const char *ID = "  ";/*在下面添加你的代码
类的声明和实现代码都写在下方*/
class String {
private:int length;//字符串的长度char *pData;//字符串的内容,注意:字符串以'\0'结尾public:/*改写默认构造函数*/String() {pData=NULL;length=0;}/*构造函数*/String(const char *s) {pData = new char[strlen(s) + 1];memset(pData, 0, sizeof(pData));length = 0;while (s[length] != '\0'){pData[length] = s[length];length++;}pData[length] = '\0';}/*在下方编写拷贝构造函数*/String(const String &T) {pData = new char[T.length + 1];memset(pData, 0, sizeof(pData));for (int i = 0;i <= T.length;i++)pData[i] = T.pData[i];length = T.length;}/*在下方编写拷贝赋值运算operator=*/String& operator=(const String &other) {if (this == &other)return *this;delete[]pData;pData = new char[strlen(other.pData) + 1];memset(pData, '\0', sizeof(pData));for (int i = 0;i < other.length;i++)pData[i] = other.pData[i];length = other.length;return *this;}/*析构函数*/~String() {delete[]pData;pData = NULL;length = 0;}/*在下方编写其它成员函数*/
int GetLength() 
{return length;
}bool GetChar(int index, char &ch)
{if (index >= length || index<0)return false;else{ch = pData[index];return true;}
}bool SetChar(int index, const char ch) 
{if (index >= length || index<0)return false;else{pData[index] = ch;return true;}
}void Concat(const String &s) 
{char* str = new char[length + s.length + 1];int i;for (i = 0;i < length;i++){str[i] = pData[i];}for (int j = 0;i < length + s.length + 1;i++, j++){str[i] = s.pData[j];}length = length + s.length;delete[]pData;pData = str;
}/*Display函数不用改写*/void Display() const {if (0 != pData)std::cout << pData;std::cout << endl;}
};/*上述代码编写完成之后,请把下面的宏改为:
#define TEST 1
*/
#define TEST    1/*=======================================================*/
/*以下代码不要修改*/
/*=======================================================*/
int main(void) {std::cout << name << " " << ID << endl;#if TESTString s1;s1.Display();String s2("Hello World!");s2.Display();cout << s2.GetLength() << endl;String s3(" C++ Programming.");s3.Display();cout << s3.GetLength() << endl;s2.Concat(s3);s2.Display();cout << s2.GetLength() << endl;char ch = 0;if (s2.GetChar(0, ch)) {s2.SetChar(0, 'h');s2.Display();}String s4 = String("My God!");s4.Display();#endif // TESTreturn 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://xiahunao.cn/news/1383240.html

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

CH4-面向对象下 (8个案例实现)

【案例4-1】打印不同的图形 【案例介绍】 1. 案例描述 ​ 本案例要求编写一个程序&#xff0c;可以根据用户要求在控制台打印出不同的图形。例如&#xff0c;用户自定义半径的圆形和用户自定义边长的正方形。 2. 运行结果 【案例目标】 学会“抽象类实现不同图形的打印程序…

22、Java面向对象——String类

目录 课前先导 一、String类 1、string类 2、字符串的特点 3、String类中的构造方法 4、String类对象的特点 5、字符串的比较 6、获取字符串中的字符 7、获取字符串的长度 二、字符串对象的练习 1、遍历字符串 2、统计字符串中的字符 3、拼接字符串 4、字符串反…

Java实验四 深入面向对象

实验四 深入面向对象 一、实验目的与要求 1、深刻理解面向对象的三大特征&#xff1b; 2、熟练掌握关键super、final的含义及用法&#xff1b; 3、理解什么是抽象类、抽象方法&#xff0c;以及两者间的关系&#xff1b; 4、深刻理解接口的概念、作用&#xff0c;以及与抽…

java面向对象编程实例讲解_Java面向对象编程实例详解

Java是一种面向对象的语言&#xff0c;是实现面向对象编程的强大工具。但如何在编程中实际运用并发挥其最大效能呢&#xff1f;本文通过一个实际Java程序的开发过程&#xff0c;详细说明了如何使用面向对象实现Java编程。 我们要实现的Java应用程序是&#xff1a;当用户输入一个…

高端百度地图开发2:自定义水滴头像(鼠标事件、API封装对接)

高端百度地图开发系列 高端百度地图开发1&#xff1a;自定义水滴头像&#xff08;自定义标注覆盖物、Overlay覆盖类&#xff09; 自定义水滴头像之鼠标事件、API封装对接 高端百度地图开发系列一、添加自定义覆盖物的方法二、对接API数据1.获取API数据(模拟)2.遍历数据3.添加自…

2023年中国智慧公安行业发展现况及发展趋势分析:数据化建设的覆盖范围不断扩大[图]

智慧公安基于互联网、物联网、云计算、智能引擎、视频技术、数据挖掘、知识管理为技术支撑&#xff0c;公安信息化为核心&#xff0c;通过互联互通、物联化、智能方式促进公安系统各功能模块的高度集成、协同作战实现警务信息化“强度整合、高度共享、深度应用”警察发展的新概…

写一个简单炫酷的app程序的打开动画

app也是有颜值&#xff0c;动画就是一种化妆术&#xff0c;他让你的app更加炫酷&#xff0c;首先给你看下图 首先呢&#xff0c;先普及下总体的框架知识&#xff0c;有三种动画 (1)Drawable Animation&#xff1a;逐帧动画&#xff0c;就像电影一样&#xff0c;一帧一帧&am…

安卓开机动画的制作

开机动画的存储位置&#xff1a; system/media/bootanimation.zip。 bootanimation.zip的文件结构&#xff1a;包含一个desc.txt和N个文件夹&#xff08;一般两个&#xff09;。desc.txt是用来指导如何执行动画页面。文件夹里存放要播放的照片&#xff08;支持png和jpg格式&am…

安卓基础动画

在开发的过程中&#xff0c;动画可以实现很好的效果&#xff0c;比如对于图片的旋转&#xff0c;电子罗盘的都可以利用动画来时实现。但是对于动画不太熟悉&#xff0c;经常想用却不会用&#xff0c;特地写这篇博客&#xff0c;记录一下对于动画的学习。 主要学习帧动画和Objec…

安卓动画:

Android的三种动画&#xff0c;即&#xff1a; •View Animation&#xff08;视图动画&#xff09; •Drawable Animation&#xff08;帧动画&#xff09; •Property Animation&#xff08;属性动画&#xff09; Drawable Animation&#xff08;帧动画&#xff09;&#xff1…

安卓手机开机动画制作原理教程

先说开机动画实现原理&#xff1a; Android的动画是由一系列的连续PNG图片作为帧组成的动画形式。 不是合成为一张GIF图片&#xff0c;而是一个文件包&#xff0c;将各帧PNG图片以压缩方式保存。 这个保存的文件名就是bootanimation.zip&#xff0c;这个文件是zip压缩文件&a…

安卓之动画制作

1.知识图谱 &#xff08;补间动画和帧动画&#xff09; 1.补间动画的效果图&#xff1a; &#xff08;alpha透明度&#xff09; &#xff08;ratate旋转&#xff09; XML代码&#xf…

Android BT

整个bluedroid可以分为两大模块&#xff1a;BTIF&#xff0c;BTE BTIF&#xff1a;提供bluedroid对外的接口;作为bluedroid与上层的framework提供interface。所以它处于bluedroid的顶层。 BTE&#xff1a;bluedroid的内部处理&#xff0c;又细分为BTA&#xff0c;BTU&#xf…

04.BT下载

04.BT下载 下载&#xff0c;是很多网络用户必备的需求之一。以往我们使用现成工具迅雷&#xff0c;我们必须保持开机&#xff0c;会员&#xff0c;合法等等要求&#xff0c;但是依托服务器&#xff0c;我们其实也可以搭建BT下载工具&#xff0c;只要你的硬盘够用&#xff0c;把…

BackTrack5(BT5)各版本下载

BT5R3(最新版本)http://www.nigesb.com/backtrack-5-r3-released.html BT5R2 KDE版32位&#xff1a; http://ftp.halifax.rwth-aachen.de/backtrack/BT5R2-KDE-32.iso GNOME32位&#xff1a;http://ftp.halifax.rwth-aachen.de/backtrack/BT5R2-GNOME-32.iso BT5R1 KDE版32位…

mysql 存储用户头像_node+vue用户头像处理上传并保存

2017年7月14日19:21:29 &#xff0c;最近做个网站&#xff0c;需要有用户头像裁剪上传功能&#xff0c;具体流程是用户在本地选择图片&#xff0c;前端将图片裁剪好发给后端&#xff0c;后端接收到图片将它保存起来&#xff0c;并将信息存入数据库。 先说一下环境后端是express…

java 根据用户名生成头像。

先上效果图 自行根据需求修改代码 package com.space; import java.awt.*; import java.awt.geom.RoundRectangle2D; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import java.util.Random; import java.util.regex.Matcher; im…

支付宝小程序serverless---获取用户信息(头像)并保存到云数据库

支付宝小程序serverless—获取用户信息&#xff08;头像&#xff09;并保存到云数据库 博客说明 文章所涉及的资料来自互联网整理和个人总结&#xff0c;意在于个人学习和经验汇总&#xff0c;如有什么地方侵权&#xff0c;请联系本人删除&#xff0c;谢谢&#xff01; 我又回…

湘大 XTU OJ 1260 Completed String 题解(非常详细):建立数组下标和数组元素之间的映射关系 ~scanf

一、链接 1260 Completed String 二、题目 题目描述 给一个字符串&#xff0c;请判断字符串是否出现了所有的英文字母&#xff08;不区分大小写&#xff09;。 输入 每行一个只含英文字母的字符串&#xff0c;长度不超过1000。 输出 每行输出一个样例的结果&#xff0c…

openCV配置+cmake操作记录--Ubuntu 16.04版本

项目需要openCV相关操作,于是找了好多教程,琢磨了好久,写个笔记。 更新ubuntu上的一些库: sudo apt-get update sudo apt-get upgrade 安装一些库:(虽然我现在也不明白这玩意,我是纯小白/(ㄒoㄒ)/~~) sudo apt-get install cmake sudo apt-get install build-essen…