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

📄 simplestring.cpp

📁 实现一个字符串类的若干函数的操作
💻 CPP
字号:
// SimpleString.cpp: implementation of the CSimpleString class.
//
//////////////////////////////////////////////////////////////////////

#include "SimpleString.h"
#include <iostream.h>
#include <assert.h>
#include <string.h>

//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////

//接收一个字符串指针(char *)的构造函数
CSimpleString::CSimpleString(const char *s)
{
	length=strlen(s);
	sPtr=new char [length+1];
	strcpy(sPtr,s);
}

//拷贝构造函数
CSimpleString::CSimpleString(const CSimpleString &copy)
{
	length=copy.length;
	sPtr=new char [length+1];
	strcpy(sPtr,copy.sPtr);
}

//析构函数
CSimpleString::~CSimpleString()
{
	delete [] sPtr;
}

//赋值运算符
const CSimpleString & CSimpleString::operator = (const CSimpleString &string)
{
	if( & string != this)
	{
		delete[] sPtr;
		length=string.length;
		sPtr=new char [length+1];
		strcpy(sPtr,string.sPtr);
	}
	else
		cout<<"Attempted assignment of a CSimpleString to itself\n";

	return *this;
}

//字符串连接(+)
CSimpleString & CSimpleString::operator+ (const CSimpleString &string)
{
	CSimpleString *tempPtr=new CSimpleString;
	tempPtr->length=length+string.length;
	strcpy(tempPtr->sPtr,this->sPtr);
	strcat(tempPtr->sPtr,string.sPtr);
	return *tempPtr;
}

//字符串连接(+=)
CSimpleString & CSimpleString::operator += (const CSimpleString &string)
{
	char * tempPtr=sPtr;
	length+=string.length;
	sPtr=new char [length+1];
	strcpy(sPtr,tempPtr);
	strcat(sPtr,string.sPtr);
	delete [] tempPtr;
	return *this;
}

//强制类型转换运算符
CSimpleString::operator const char*() const
{	
	char *tempPtr=new char [length+1];
	strcpy(tempPtr,sPtr);
	return tempPtr;
}

//字符串输出
ostream &operator<< (ostream &output,const CSimpleString &s)
{
	output<<s.sPtr;
	return output;
}

//测试s1==s2
int operator ==(const CSimpleString &s1,const CSimpleString &s2)
{	return strcmp (s1.sPtr,s2.sPtr) !=0;	}

//测试s1<s2
int operator < (const CSimpleString &s1,const CSimpleString &s2)
{	return strcmp (s1.sPtr,s2.sPtr) < 0;	}

//测试s1>s2
int operator > (const CSimpleString &s1,const CSimpleString &s2)
{	return strcmp (s1.sPtr,s2.sPtr) > 0;	}

//下标运算符
char &CSimpleString::operator [] (int i)
{
	assert(i >= 0 && i < length);
	return sPtr [i];
}

//获取字符串的长度
int CSimpleString::GetLength ()const 
{	return length;	}

//判断字符串是否为空
bool CSimpleString::IsEmpty()
{
	if(length==0)	return true;
	else			return false;
}

//清空当前字符串
void CSimpleString::empty()
{
	delete []sPtr;
	char* s="";
	length=strlen(s);
	sPtr=new char [length+1];
	strcpy(sPtr,s);
}

//将当前字符串倒置
void CSimpleString::MakeReverse()
{
	int i=0,j=length-1;
	char ch;
	for( ;i<length/2;i++,j--)
	{
		ch=sPtr[i];
		sPtr[i]=sPtr[j];
		sPtr[j]=ch;
	}
}

//当前字符串变成大写字符串
void CSimpleString::MakeUpper()
{
	for(int i=0;i<length;i++)
		if(sPtr[i] >= 97 && sPtr[i] <= 122)  sPtr[i]-=32;
}

//当前字符串变成小写字符串
void CSimpleString::MakeLower()
{
	for(int i=0;i<length;i++)
		if(sPtr[i] >=65 && sPtr[i] <= 90) sPtr[i]+=32;
}

//去除当前字符串的前导空格字符
void CSimpleString::TrimLeft()
{	
	char* p=sPtr;
	while(*p == 32)	
	{	
		p++;
		length--;
	}
	char *tempPtr = new char[length+1];
	strcpy(tempPtr,p);
	delete []sPtr;
	sPtr=tempPtr;
}

//去除当前字符串的后缀空格字符
void CSimpleString::TrimRight()
{
	char* p=sPtr+length-1;
	while(*p == 32)
	{
		p--;
		length--;
	}
	*(++p)='\0';
	char *tempPtr = new char[length+1];
	strcpy(tempPtr,sPtr);
	delete []sPtr;
	sPtr=tempPtr;
}

//插入字符
void CSimpleString::Insert(int nIndex, char ch)
{
	char *tempPtr = new char[length+2];

	if(nIndex<=length)
	{
		for(int i=0; i<nIndex; i++)		tempPtr[i]=sPtr[i];
		tempPtr[i]=ch;
		for( ; i<=length; i++)	tempPtr[i+1]=sPtr[i];
	}
	else
	{
		strcpy(tempPtr,sPtr);
		tempPtr[length]=ch;
		tempPtr[length+1]='\0';
	}

		length++;
		delete []sPtr;
		sPtr=tempPtr;
}

//删除字符
bool CSimpleString::Delete(int nIndex, int nCount)
{
	if(nIndex >= 0 && nIndex < length && (nIndex+nCount) <= length)
	{
		char *tempPtr = new char[length+1-nCount];
		for(int i=0; i<nIndex; i++)		tempPtr[i]=sPtr[i];
		for( ; i<length; i++)		tempPtr[i]=sPtr[i+nCount];
		length -= nCount;
		delete []sPtr;
		sPtr=tempPtr;
		return true;
	}
	else 
		return false;
}

⌨️ 快捷键说明

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