c 类似java deflater的类_使用C/C++新建了一个类似于Java的StringBuffer类

使用C/C++新建了一个类似于Java的StringBuffer类,主要实现了常规的几种方法:

1.StringBuffer & append(const char * _c) ;

这个方法是往字符串中插入字符到最后;

2.StringBuffer(const StringBuffer & buf);

在C语言中如果需要使用到a=b这种赋值方法,并且数据成员使用指针形式,那么则需要自定义一个复制函数;

3.char* toString();

返回数据成员中的char数据;

4.int length();

返回字符串的长度;

5.std::string substr(int start = 0,int len = 1);

截取字符串,通常需要借助indexOf的方法来查找字符串的位置;

6.void replaceAll(const char * find, const char * des);

替换字符串中的指定文字;

7.int indexOf(const char * find);

查找指定字符串的位置,如果没有则返回-1;

8.bool operator==(const StringBuffer & buf);

C/C++中特有的方法,如果需要使用运算符:a==b,增需要定义一个自定义的运算符方法,这里只定义了:==。

接着就是贴出头文件:StringBuffer.h

#pragma once

#include

//exmple:

/*

// StringBuffer sb;

// or like this:

// StringBuffer sb("test");

// sb.append("append.");

// and you can like this:

// sb.append("append 1,").append("append 2,");

// equal:

// sb1==sb?1:0

// if(sb1 == sb){//do something...}

// length:

// sb.length();

// substring:

// sb.substr(int strat,int end);

// sb.substr(0,1);//it will be return "t";

// find:

// sb.indexOf(char * find_char);

// sb.indexOf("st");//it will be return 2;

// sb.indexOf("index");//it will be return -1;

// replaceAll:

// sb.replaceAll(char * find_char,char * des_char);

// like this:

// sb.replaceAll("test","1234");

// toString:

// sb.toString();

*/

#ifndef STRING_BUFFER

#define STRING_BUFFER

class StringBuffer

{

private:

char * value;

char * value1;

int len;

int _number;

public:

StringBuffer();

StringBuffer(const char * _c);

StringBuffer & append(const char * _c) ;

StringBuffer(const StringBuffer & buf);

char* toString();

int length();

std::string substr(int start = 0,int len = 1);

void replaceAll(const char * find, const char * des);

int indexOf(const char * find);

bool operator==(const StringBuffer & buf);

~StringBuffer();

};

#endif // !STRING_BUFFER

然后贴出代码:

#include "pch.h"

#include "StringBuffer.h"

#include

#include

StringBuffer::StringBuffer()

{

len = 1;

_number = 0;

value = new char[2]{"\0"};

}

StringBuffer::StringBuffer(const char * _c) {

len = std::strlen(_c) + 1;

_number = 1;

value = new char[len];

strcpy_s(value, len, _c);

}

StringBuffer::StringBuffer(const StringBuffer & buf) {

len = buf.len;

_number = buf._number;

value = new char[len];

strcpy_s(value, len, buf.value);

}

StringBuffer::~StringBuffer()

{

delete[] value;

std::cout << "StringBuffer out." << std::endl;

}

StringBuffer & StringBuffer::append(const char * _c) {

int _l = std::strlen(_c)+1;

value1 = new char[len+_l];

strcpy_s(value1, len, value);

strcat_s(value1, len + _l, _c);

value = value1;

len += _l;

_number++;

return *this;

}

char* StringBuffer::toString() {

return this->value;

}

int StringBuffer::length() {

return strlen(value);

}

std::string StringBuffer::substr(int start, int len) {

std::string s = value;

return s.substr(start, len);

}

int StringBuffer::indexOf(const char * find) {

std::string s = value;

return s.find(find);

}

void StringBuffer::replaceAll(const char * find, const char * des) {

int idx = 0;

int _len = std::strlen(find);

bool has = false;

std::string s = value;

while (idx > -1)

{

idx = s.find(find);

if (idx > -1) {

s = s.replace(idx, _len, des);

has = true;

}

}

if (has) {

strcpy_s(value, strlen(s.data()) + 1, s.data());

len = strlen(s.data()) + 1;

value1 = value;

}

}

bool StringBuffer::operator==(const StringBuffer & buf) {

if (this == &buf) {

return true;

}

return strcmp(this->value, buf.value) == 0;

}

来一张效果图呗:

e1e9035b167587ac970e284245b8ed72.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值