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;
}