博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
数据结构-串(字符串类基本实现C++)
阅读量:4093 次
发布时间:2019-05-25

本文共 3275 字,大约阅读时间需要 10 分钟。

​计算机上的非数值处理对象基本上是字符串数据。在比较早的程序设计语言中,字符串是作为输入和输出的常量出现的。随着语言的发展,产生了字符串处理,这样字符串也就作为一种变量类型出现在众多的设计语言中,也产生了许多的字符串操作,字符串一般简称为串。串(字符串)是由零个或多个字符组成的有序序列。

以上是对字符串一个基本的介绍,关于字符串其实还有很多的知识点,但是这次内容主要是根据c++中std::string的相关用法,用c++实现一个简单的字符串类,以下是相关的代码实现,有不足的地方欢迎指正!

CString.hpp基本实现:

#ifndef _CSTRING_H_#define _CSTRING_H_#include
#include
​using namespace std;class CString{private:  char *data; //字符指针  int length; //字符串实际长度public: CString(const char *val = nullptr);//普通构造函数 CString(const CString& val);//拷贝构造函数 ~CString();//析构函数​ CString& operator=(const CString& val);//赋值运算符 CString operator+(const CString &val) const;//+操作符 CString& operator+=(const CString &val);//+=操作符 char& operator[](int n) const;//下标操作符 bool operator==(const CString &val) const; //判断两个字符串是否相等 int size()const; //返回字符串长度  const char* c_str() const; //string转const char* //重载输出运算符 friend ostream & operator<<(ostream &out, const CString &str);};​​CString::CString(const char *val){ if (val) { length = strlen(val);    data = new char[length + 1];//重新申请内存空间    assert(nullptr != data);//申请内存空间失败直接返回错误,终止执行    strcpy(data, val);//拷贝内容到新申请的内存空间 } else { length = 0; data = new char[1];//申请内存空间 assert(nullptr != data);//申请内存空间失败直接返回错误,终止执行    data[0] = '\0';//这里要注意,string以‘\0’结尾,但是实际长度不计算结束符 }}​CString::CString(const CString& val){ delete[] data; length = val.size(); data = new char[length + 1]; assert(nullptr != data); strcpy(data, val.c_str());}​CString::~CString(){ delete[] data; data = 0;}​CString& CString::operator=(const CString& val){ if (this == &val)//自身赋值 return *this;​ delete[]data; length = val.size(); data = new char[length + 1]; assert(nullptr != data); strcpy(data, val.c_str()); return *this;}​​CString CString::operator+(const CString &val)const{ CString tmpString; tmpString.length = length + val.size(); tmpString.data = new char[tmpString.length + 1]; strcpy(tmpString.data, data); strcat(tmpString.data, val.c_str()); return tmpString;}​CString& CString::operator+=(const CString &val){ length += val.size(); char *tmpdata = new char[length + 1]; strcpy(tmpdata, data); strcat(tmpdata, val.c_str()); delete[] data; data = tmpdata; return *this;}​char& CString::operator[](int i) const{ if (i >= length) return data[length - 1]; else return data[i];}​bool CString::operator==(const CString& val) const{ if (length != val.size()) return false; return strcmp(data, val.c_str()) ? false : true;}​int CString::size() const{ return length;}​const char* CString::c_str() const{ return data;}​​ostream & operator<<(ostream &out, CString &str){ out << str.c_str(); return out; }​​#endif // !_CSTRING_H_​

main.cpp实现:

#include "CString.hpp"#include 
using namespace std;​int main(int argc, char**argv){ CString str1("it"); cout << "str1: " << str1 << endl;​ CString str2(str1); cout << "str2: " << str2 << endl;​ CString str3 = "container"; cout << "str3: " << str3 << endl;​ cout << "str1=str3?: " << (str1 == str3) << endl;​ CString str4 = str1; str4 += str3; cout << "str4: " << str4 << endl; cout << "str4[1]: " << str4[1] << endl; cout << "str4.size: " << str4.size() << endl; cout << "str4.c_str(): " << str4.c_str() << endl; system("pause"); return 0;}

执行结果:

 

--|END|--


 

 

转载地址:http://ceiii.baihongyu.com/

你可能感兴趣的文章
C++ 模板类型参数
查看>>
C++ 非类型模版参数
查看>>
设计模式 依赖倒转原则 & 里氏代换原则
查看>>
DirectX11 光照
查看>>
图形学 图形渲染管线
查看>>
DirectX11 计时和动画
查看>>
DirectX11 光照与材质的相互作用
查看>>
DirectX11 法线向量
查看>>
DirectX11 兰伯特余弦定理(Lambert)
查看>>
DirectX11 漫反射光
查看>>
DirectX11 环境光
查看>>
DirectX11 镜面光
查看>>
DirectX11 三种光照组成对比
查看>>
DirectX11 指定材质
查看>>
DirectX11 平行光
查看>>
DirectX11 点光
查看>>
DirectX11 聚光灯
查看>>
DirectX11 HLSL打包(packing)格式和“pad”变量的必要性
查看>>
DirectX11 光照演示示例Demo
查看>>
漫谈一下前端的可视化技术
查看>>