⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 strings.cpp

📁 This a Vector Class overloading operator >>,<<,+,-,*,=,! 2 vector
💻 CPP
字号:
// Strings.cpp: implementation of the Strings class.
//
//////////////////////////////////////////////////////////////////////
#include <iostream.h>
#include <iomanip.h>
#include "strings.h"
#include <string.h>
#include <assert.h>
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

Strings::Strings(const char *S)
{
	cout << "Conversion constructor: " << S << endl;
	Length = strlen(S);
	Ptr = new char[Length + 1];
	assert(Ptr != 0);
	strcpy(Ptr, S);
}

Strings::Strings(const Strings &Copy)
{
	cout << "Copy constructor: " << Copy.Ptr << endl;
	Length = Copy.Length;
	Ptr = new char[Length + 1];
	assert(Ptr != 0);
	strcpy(Ptr, Copy.Ptr);
}

//Destructor
Strings::~Strings()
{
	cout << "Destructor: " << Ptr << endl;
	delete [] Ptr;
}

Strings &Strings::operator=(const Strings &Right)
{
	cout << "operator= called" << endl;
	if (&Right != this)
	{
		delete [] Ptr;
		Length = Right.Length;
		Ptr = new char[Length + 1];
		assert(Ptr != 0);
		strcpy(Ptr, Right.Ptr);
	}
	else
		cout<<"Attempted assignment of a Strings 
									to itself" << endl;
	return *this;
}

Strings &Strings::operator+=(const Strings &Right)
{
	char *TempPtr = Ptr;
	Length += Right.Length;
	Ptr = new char[Length + 1];
	assert(Ptr != 0);
	strcpy(Ptr, TempPtr);
	strcat(Ptr, Right.Ptr);
	delete [] TempPtr;
	return *this;
}

int Strings::operator!() const
{
	return Length == 0;
}

int Strings::operator==(const Strings &Right) const
{
	return strcmp(Ptr, Right.Ptr) == 0;
}

int Strings::operator!=(const Strings &Right) const
{
	return strcmp(Ptr, Right.Ptr) != 0;
}

int Strings::operator<(const Strings &Right) const
{
	return strcmp(Ptr, Right.Ptr) < 0;
}

int Strings::operator>(const Strings &Right) const
{
	return strcmp(Ptr, Right.Ptr) > 0;
}

int Strings::operator>=(const Strings &Right) const
{
	return strcmp(Ptr, Right.Ptr) >= 0;
}

int Strings::operator<=(const Strings &Right) const
{
	return strcmp(Ptr, Right.Ptr) <= 0;
}

char &Strings::operator[](int Subscript)
{
	assert(Subscript >= 0 && Subscript < Length);
	return Ptr[Subscript];
}

Strings &Strings::operator()(int Index, int SubLength)
{
	assert(Index >= 0 && Index < Length 
								&& SubLength >= 0);
	Strings *SubPtr = new Strings;
	assert(SubPtr != 0);
	if ((SubLength == 0)||(Index + SubLength > Length))
		SubPtr->Length = Length - Index + 1;
	else
		SubPtr->Length = SubLength + 1;
	delete SubPtr->Ptr;
	SubPtr->Ptr = new char[SubPtr->Length];
	assert(SubPtr->Ptr != 0);
	strncpy(SubPtr->Ptr, &Ptr[Index], SubPtr->Length);
	SubPtr->Ptr[SubPtr->Length] = '\0';
	return *SubPtr;
}

int Strings::GetLength() const
{
	return Length;
}
ostream &operator<<(ostream &Output, const Strings &S)
{
	Output << S.Ptr;
	return Output;
}

istream &operator>>(istream &Input, Strings &S)
{
	char Temp[100];
	Input >> setw(100) >> Temp;
	S = Temp;
	return Input;
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -