顺序串
2016-01-16 12:12
453 查看
#ifndef __SQSTRING_H_
#define __SQSTRING_H_
#include <iostream>
using namespace std;
const int MaxSize = 100;
class SqStringClass
{
public:
SqStringClass();
~SqStringClass();
SqStringClass &operator = (char *cstr); //重载赋值运算符
SqStringClass &operator = (SqStringClass &t);
int StrLength(); //求串长度
SqStringClass &operator + (SqStringClass &t);//连接串
SqStringClass &SubStr(int i,int j); //求子串
SqStringClass &InsStr(int i,SqStringClass &s);//插入串
SqStringClass &DelStr(int i,int j); //删除串
SqStringClass &RepStr(int i,int j,SqStringClass &s);//替换串
void DispStr(); //输出串
friend bool StrEqueal(SqStringClass &s, SqStringClass &t);//比较两个顺序串相等
friend int Strcmp(SqStringClass &s,SqStringClass &t);//以字典顺序比较两个英文字母串s和t的大小
private:
char *data; //存放串中的元素
int length; //串中字符的个数
};
//
SqStringClass::SqStringClass()
{
data = new char[MaxSize];
length = 0;
}
//
SqStringClass::~SqStringClass()
{
delete []data;
}
//
SqStringClass& SqStringClass::operator=(char *cstr)
{
int i;
for(i = 0; i<cstr[i]!='\0'; ++i)
{
data[i] = cstr[i];
}
length = i;
return *this;
}
//
SqStringClass& SqStringClass::operator=(SqStringClass &t)
{
int i;
for( i = 0; i<t.length; ++i)
{
data[i] = t.data[i];
}
length = t.length;
return *this;
}
//
int SqStringClass::StrLength()
{
return length;
}
//
SqStringClass& SqStringClass::operator+(SqStringClass &t)
{
static SqStringClass nstr;
int i;
nstr.length = length + t.length;
for(i = 0;i<length;++i)
nstr.data[i] = data[i];
for(i = 0;i<t.length;++i)
nstr.data[length+i] = t.data[i];
return nstr;
}
//
SqStringClass& SqStringClass::SubStr(int i,int j) //求子串
{
static SqStringClass nstr;
int k;
if(i<0||i>length||j<0||i+j-1>length)
return nstr;
for(k = i-1;k<i+j-1;++k)
{
nstr.data[k] = data[k];
}
nstr.length = j;
return nstr;
}
//
SqStringClass& SqStringClass::InsStr(int i,SqStringClass &t)
{
int j;
static SqStringClass nstr;
if(i<=0||i>length+1)
return nstr;
for(j = 0;j<i-1;++j)
nstr.data[j] = data[j];
for(j = 0;j<t.length;++j)
nstr.data[i+j-1] = t.data[j];
for(j = i-1;j<length;++j)
nstr.data[t.length+j] = data[j];
nstr.length = length + t.length;
return *this;
}
//
SqStringClass& SqStringClass::DelStr(int i,int j)
{
int k;
static SqStringClass nstr;
if(i<=0||i>length||i+j-1>length)
return nstr;
for(k = 0; k<i-1; ++k)
nstr.data[k] = data[k];
for(k = i+j-1; k<length; ++k)
nstr.data[k-j] = data[k];
nstr.length = length -j;
return nstr;
}
//
SqStringClass& SqStringClass::RepStr(int i,int j,SqStringClass &s)
{
int k;
static SqStringClass nstr;
if(i<=0||i>length||i+j-1>length)
return nstr;
for(k = 0; k<i-1; ++k)
nstr.data[k] = data[k];
for(k = 0; k<s.length; ++k)
nstr.data[i+k-1] = s.data[k];
for(k = i+j-1; k<length; ++k)
nstr.data[s.length+k-j] = data[k];
nstr.length = length - j + s.length;
return nstr;
}
//
void SqStringClass::DispStr()
{
int i;
for(i = 0; i<length; ++i)
cout<<data[i];
cout<<endl;
}
//
bool StrEqueal(SqStringClass &s,SqStringClass &t)
{
int i;
if(s.length != t.length)
return false;
for(i = 0; i<s.length; ++i)
{
if(s.data[i] != t.data[i])
return false;
}
return true;
}
int Strcmp(SqStringClass &s,SqStringClass &t)
{
int i,comlen;
if(s.length<t.length)
comlen = s.length;
else
comlen = t.length;
for(i = 0;i<comlen;++i)
{
if(s.data[i]>t.data[i])
return 1;
else if(s.data[i]<t.data[i])
return -1;
}
if(s.length == t.length)
return 0;
else if(s.length>t.length)
return 1;
else
return -1;
}
#endif // __SQSTRING_H_
#define __SQSTRING_H_
#include <iostream>
using namespace std;
const int MaxSize = 100;
class SqStringClass
{
public:
SqStringClass();
~SqStringClass();
SqStringClass &operator = (char *cstr); //重载赋值运算符
SqStringClass &operator = (SqStringClass &t);
int StrLength(); //求串长度
SqStringClass &operator + (SqStringClass &t);//连接串
SqStringClass &SubStr(int i,int j); //求子串
SqStringClass &InsStr(int i,SqStringClass &s);//插入串
SqStringClass &DelStr(int i,int j); //删除串
SqStringClass &RepStr(int i,int j,SqStringClass &s);//替换串
void DispStr(); //输出串
friend bool StrEqueal(SqStringClass &s, SqStringClass &t);//比较两个顺序串相等
friend int Strcmp(SqStringClass &s,SqStringClass &t);//以字典顺序比较两个英文字母串s和t的大小
private:
char *data; //存放串中的元素
int length; //串中字符的个数
};
//
SqStringClass::SqStringClass()
{
data = new char[MaxSize];
length = 0;
}
//
SqStringClass::~SqStringClass()
{
delete []data;
}
//
SqStringClass& SqStringClass::operator=(char *cstr)
{
int i;
for(i = 0; i<cstr[i]!='\0'; ++i)
{
data[i] = cstr[i];
}
length = i;
return *this;
}
//
SqStringClass& SqStringClass::operator=(SqStringClass &t)
{
int i;
for( i = 0; i<t.length; ++i)
{
data[i] = t.data[i];
}
length = t.length;
return *this;
}
//
int SqStringClass::StrLength()
{
return length;
}
//
SqStringClass& SqStringClass::operator+(SqStringClass &t)
{
static SqStringClass nstr;
int i;
nstr.length = length + t.length;
for(i = 0;i<length;++i)
nstr.data[i] = data[i];
for(i = 0;i<t.length;++i)
nstr.data[length+i] = t.data[i];
return nstr;
}
//
SqStringClass& SqStringClass::SubStr(int i,int j) //求子串
{
static SqStringClass nstr;
int k;
if(i<0||i>length||j<0||i+j-1>length)
return nstr;
for(k = i-1;k<i+j-1;++k)
{
nstr.data[k] = data[k];
}
nstr.length = j;
return nstr;
}
//
SqStringClass& SqStringClass::InsStr(int i,SqStringClass &t)
{
int j;
static SqStringClass nstr;
if(i<=0||i>length+1)
return nstr;
for(j = 0;j<i-1;++j)
nstr.data[j] = data[j];
for(j = 0;j<t.length;++j)
nstr.data[i+j-1] = t.data[j];
for(j = i-1;j<length;++j)
nstr.data[t.length+j] = data[j];
nstr.length = length + t.length;
return *this;
}
//
SqStringClass& SqStringClass::DelStr(int i,int j)
{
int k;
static SqStringClass nstr;
if(i<=0||i>length||i+j-1>length)
return nstr;
for(k = 0; k<i-1; ++k)
nstr.data[k] = data[k];
for(k = i+j-1; k<length; ++k)
nstr.data[k-j] = data[k];
nstr.length = length -j;
return nstr;
}
//
SqStringClass& SqStringClass::RepStr(int i,int j,SqStringClass &s)
{
int k;
static SqStringClass nstr;
if(i<=0||i>length||i+j-1>length)
return nstr;
for(k = 0; k<i-1; ++k)
nstr.data[k] = data[k];
for(k = 0; k<s.length; ++k)
nstr.data[i+k-1] = s.data[k];
for(k = i+j-1; k<length; ++k)
nstr.data[s.length+k-j] = data[k];
nstr.length = length - j + s.length;
return nstr;
}
//
void SqStringClass::DispStr()
{
int i;
for(i = 0; i<length; ++i)
cout<<data[i];
cout<<endl;
}
//
bool StrEqueal(SqStringClass &s,SqStringClass &t)
{
int i;
if(s.length != t.length)
return false;
for(i = 0; i<s.length; ++i)
{
if(s.data[i] != t.data[i])
return false;
}
return true;
}
int Strcmp(SqStringClass &s,SqStringClass &t)
{
int i,comlen;
if(s.length<t.length)
comlen = s.length;
else
comlen = t.length;
for(i = 0;i<comlen;++i)
{
if(s.data[i]>t.data[i])
return 1;
else if(s.data[i]<t.data[i])
return -1;
}
if(s.length == t.length)
return 0;
else if(s.length>t.length)
return 1;
else
return -1;
}
#endif // __SQSTRING_H_
相关文章推荐
- 网络编程API-上 (基本API)
- 飞龙的程序员书单 – 思想、工程、架构、职业发展
- 杭电2098分拆素数和
- easyui 在tabs子页面关闭当前tabs
- python subprocess 学习记录
- CenOS6.6下编译安装LAMP
- 深度学习:推动NLP领域发展的新引擎
- 错误集
- OpenMP编程指南
- ASIHttpRequest 摘要
- Ubuntu14.04 JAVA环境配置
- HDU 4981 Goffi and Median(水)
- jQuery实现图片走马灯效果的原理分析
- MySQL语句
- ThreadLocale理解和对WeakReference的运用
- Cocoa的内存管理原则
- Activity启动模式 lauchMode
- Android并发编程之图文解析volatile关键字
- hdu2057 A + B Again
- Oracle跨数据库操作