您的位置:首页 > 其它

顺序串

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_
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: