C++中string类的实现

string类头文件: 

#pragma once
#ifndef _STRING_H
#define _STRING_H
#include <stdio.h>
#include <string.h>
#include <string>
#include <iostream>
using namespace std;
class CString
{
public:
	CString(int size);
	~CString();
	CString(const char *str);
	CString(char *str);
	CString(const CString &str);
	void operator =(const CString &st);
	int size();
	
	friend ostream& operator<<(ostream& cout, const CString& s)
	{
		cout << s._str << endl;
		return cout;
	}
	friend istream& operator>>(istream& cin,  CString& s)
	{
		char str[1024] = {0};
		cin >> str;
		s = str;
		return cin;
	}

private:
	int _size;
	char *_str;
	int _length;
};
#endif // !_STRING_H

 string类实现及其测试:

#include "String.h"
CString::CString(int size =10)
{
	_str = new char[size];
	memset(_str,0,sizeof(_str));
	_size = size;
	_length = 0;
}
int CString::size()
{
	return _length;
}
CString::CString(char *str)
{
	_size = strlen(str) + 1;
	_str = new char[_size];
	_length = strlen(str);
	memset(_str, 0, _size);
	strcpy_s(_str, _size, str);
}
CString::CString(const char *str)
{
	_size = strlen(str) + 1;
	_str = new char[_size];
	_length = strlen(str);
	memset(_str,0,_size);
	strcpy_s(_str,_size,str);
}
CString::~CString()
{
	delete _str;
	_str = NULL;
	_size = 0;
	_length = 0;
}
CString::CString(const CString &str)
{
	if (this == &str)
	{
		printf("this == str");
		return;
	}
	_str = new char[str._size];
	_size = str._size;
	_length = str._length;
	strcpy_s(_str, _size,str._str);
}
void CString::operator=(const CString &str)
{
	if (this == &str)
	{
		printf("this == str");
		return;
	}
	delete _str;
	_str = NULL;
	_str = new char[str._size];
	_size = str._size;
	_length = str._length;
	strcpy_s(_str, _size, str._str);
}
int main(void)
{
	CString str("hello world");
	cout << str<< endl;
	cout << "==================" << endl;
	CString str1(str);
	cout << str1 << endl;
	cout << "==================" << endl;
	CString str2("nihao");
	str = str2;
	//cin >> str;
	CString str1;
	cin >> str1;
	cout << str1 << str1.size()<<endl;
	CString str1(20);
	str1 = str;
	CString st3 = str1;
	return 0;
}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值