简易String类的实现


#ifndef MYSTRING_H
#define MYSTRING_H
#include <iostream>
#include <stdlib.h>
#include <cstring>
//本质是对mystring的包装
class MyString
{
private:
	char* _buffer;
	int _length;
public:
	/*MyString();*/
	MyString(const char* str = nullptr);
	MyString(const MyString& str);
	MyString& operator=(const MyString& theMyString);
	~MyString();

	MyString operator+(const MyString& theMyString);
	MyString& operator+=(const MyString& theMyString);

	bool operator>(const MyString& theMyString);
	bool operator<(const MyString& theMyString);
	bool operator==(const MyString& theMyString);

	char& operator[](int index);
	char& at(int index);

	char* c_str();

	void printStr();
};

#endif

源文件:

#define _CRT_SECURE_NO_WARNINGS
#include "MyString.h"

//MyString::MyString() {
//	_buffer = new char[1];
//	*_buffer = '\0';  //设置一个空串
//	_length = 0;
//};

MyString::MyString(const MyString& str) :_length{ str._length }, _buffer{ new char[str._length + 1] }
{
	strcpy_s(_buffer, _length + 1, str._buffer);
}

MyString::MyString(const char* str /*= nullptr*/)
{
	if (str == nullptr) {
		_buffer = new char[1];
		*_buffer = '\0';  //设置一个空串
		_length = 0;
	}
	else {
		_buffer = new char[strlen(str) + 1];
		strcpy_s(_buffer, strlen(str) + 1, str);
		_length = strlen(str);
	}
}

MyString::~MyString() {
	delete[] _buffer;
};

MyString MyString::operator+(const MyString& theMyString)   //若是新对象,不用传引用了
{
	int len = strlen(_buffer) + strlen(theMyString._buffer);
	MyString newStr;
	delete[] newStr._buffer;
	newStr._buffer = new char[len + 1]{ 0 };  //要进行初始化
	newStr._length = len;

	strcat(strcat(newStr._buffer, this->_buffer),theMyString._buffer);   //starcat无法被赋值
	return newStr;
}

MyString& MyString::operator+=(const MyString& theMyString)  //返回自身要返回引用
{
	//扩充空间
	int catlen = strlen(this->_buffer);
	int srclen = strlen(theMyString._buffer);
	int len = catlen + srclen;
	this->_buffer = static_cast<char*>(realloc(this->_buffer, len + 1));
	//移动指针的首地址
	memset(this->_buffer+catlen, 0, srclen+1);   //refresh后面多出来的空间
	strcat(this->_buffer, theMyString._buffer);

	//之前比较繁琐的方法
	/*int len = strlen(_buffer) + strlen(theMyString._buffer);
	MyString temp;
	delete[] temp._buffer;
	temp._buffer = new char[len + 1]{ 0 };
	temp._length = len;
	strcat(strcat(temp._buffer, this->_buffer), theMyString._buffer);

	delete[] _buffer;
	_buffer = new char[len + 1]{ 0 };
	strcat(_buffer, temp._buffer);*/
	
	return *this;
}

bool MyString::operator>(const MyString& theMyString)
{
	return strcmp(this->_buffer,theMyString._buffer)>0;
}

bool MyString::operator<(const MyString& theMyString)
{
	return strcmp(this->_buffer, theMyString._buffer)<0;
}

bool MyString::operator==(const MyString& theMyString)
{
	return strcmp(this->_buffer, theMyString._buffer)==0;
}

//重载赋值运算符(基本格式)
MyString& MyString::operator=(const MyString& theMyString) {

	if (this != &theMyString) {   //这个this就是左值对象 Mystring*
		delete[] _buffer;         //为了防止内存泄漏
		_length = theMyString._length;
		_buffer = new char[_length + 1];
		strcpy_s(_buffer, _length + 1, theMyString._buffer);
	}

	return *this;
}

char& MyString::operator[](int index)
{
	return _buffer[index];
}

char& MyString::at(int index)
{
	return _buffer[index];
}

char* MyString::c_str()
{
	return _buffer;
}

void  MyString::printStr() {
	std::cout << _buffer << std::endl;
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 简易防火墙的实现可以通过 Socket 编程和 Java 的网络 API 完成。 下面是一个简单的 Java 防火墙实现,基于 IP 地址和端口号过滤: ```java import java.io.IOException; import java.net.InetAddress; import java.net.ServerSocket; import java.net.Socket; public class Firewall { public static void main(String[] args) throws IOException { // 创建一个 ServerSocket,监听端口 8080 ServerSocket serverSocket = new ServerSocket(8080); // 获取本地 IP 地址 InetAddress localhost = InetAddress.getLocalHost(); while (true) { // 等待客户端连接 Socket socket = serverSocket.accept(); // 获取客户端的 IP 地址和端口号 InetAddress clientAddress = socket.getInetAddress(); int clientPort = socket.getPort(); // 如果客户端 IP 地址不是本地 IP 地址,或者端口号不在指定范围内,则拒绝连接 if (!clientAddress.equals(localhost) || clientPort < 1024 || clientPort > 65535) { System.out.println("Rejecting connection from " + clientAddress.getHostAddress() + ":" + clientPort); socket.close(); } else { System.out.println("Accepting connection from " + clientAddress.getHostAddress() + ":" + clientPort); // 处理客户端请求 // ... // 关闭客户端连接 socket.close(); } } } } ``` 上面的代码创建了一个 ServerSocket 对象,用于监听端口 8080。当有客户端连接时,获取客户端的 IP 地址和端口号,如果不符合要求,则拒绝连接;否则,接受连接并处理客户端请求。 这只是一个简单的示例,实际的防火墙可能需要更复杂的规则和过滤逻辑。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值