数据结构作业-字符串的基本操作

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

#include
using namespace std;

class String
{
public:
String(int size=20)
{
str=new char[size];
Size=size;
Lenth=0;
}
String(const String &a)
{
Lenth=a.Lenth;
Size=a.Size;
str=new char [Size];
for(int i=0;i{
str[i]=a.str[i];
}
}
String(char *s)
{
Lenth=strlen(s);
Size=Lenth+20;
str=new char[Size];
}
~String(){delete []str;}

int lenth() //返回字符串长度
{
return Lenth;
}
bool strempty() //判断字符串是否为空
{
if(!str[0])
{
cout<<"字符串为空"<return true;
}
else
return false;
}
void clear() //清空字符串
{
delete []str;
str=new char [Size];
Lenth=0;
}
void apend(char c) //在串尾添加字符,若字符串已满则不添加
{
if(Lenth+1>=Size)
{
cout<<"字符串已满,添加失败"<}
else
{
str[Lenth]=c;
++Lenth;
str[Lenth]='\0';
}
}
void concatenete(char *s) //将串s复制到本串后面,若字符串已满则不添加
{
if(strlen(s)>=Size-Lenth-1)
cout<<"字符串空间不够,添加失败"<else
{
int j=Lenth;
for(int i=Lenth,k=0;i{
str[i]=s[k];
++Lenth;
}
str[Lenth]='\0';
}
}
void strcopy(char *a) //将串a复制给本串
{
if(Size-1cout<<"字符串空间不够,添加失败"<else
{
Lenth=strlen(a);
for(int i=0;istr[i]=a[i];
}
str[Lenth]='\0';
}
void insert(char c,int index) //在串中定位置插入一个字符
{
if(Lenth>=Size)
cout<<"字符串已满,添加失败"<else
{
for(int i=Lenth;i>index;i--)
{
str[i]=str[i-1];
}
str[index]=c;
Lenth++;
str[Lenth]='\0';
}
}
void deletestr(int pos,int len) //将第pos个字符开始到第len个字符结束的字符串删除
{
if(pos>0&&pos<=len&&lenfor(int i=pos-1,k=len;i{
str[i]=str[k];
Lenth=len-pos+1;
}
else
{
cout<<"输入数据有误"<}
}
int find(char c,int start) //从start开始查找字符c的位置
{
if(start{
for(int i=start;i{
if(str[i]==c)
return i+1;
}
}
else
{
return 0;
}
}
int lastfind(char c)
{
for(int i=Lenth-1;i>=0;i--)
{
if(str[i]==c)
{
return i+1;
}
}
return 0;
}
int strfind(char *a)
{
int i=0; //目标长度
int j=0; //模式长度
int tlen=Lenth; //目标的长度
int plen=strlen(a); //模式的长度
if(tlen{
cout<<"数据错误,无法匹配"<return 0;
}
while(j{
if(str[i]==a[j])
{
i++;
j++;
}
else
{
i=i-j+1;
j=0;
}
}
if(j>=plen)
{
return i-plen+1;
}
else
{
return 0;
}
}
int strfind(String a)
{


int i=0; //目标长度
int j=0; //模式长度
int tlen=Lenth; //目标的长度
int plen=a.lenth(); //模式的长度
if(tlen{
cout<<"数据错误,无法匹配"<return 0;
}
while(j{
if(str[i]==a.getstr(j))
{
i++;
j++;
}
else
{
i=i-j+1;
j=0;
}
}
if(j>=plen)
{
return i-plen+1;
}
else
{
return 0;
}
}
int BigRepeat(char *a) //函数执行结束后a存储最大字符串,返回最大字符串下标值
{
int index=0; //最大字符串首字符下标
int lenthmax=0; //最大字符串中字符个数
int lenth1; //标记相同字符串的个数
int i=0,j;
while(i{
j=i+1;
while(j{
if(str[i]==str[j])
{
lenth1=1;
for(int k=1;str[i+k]==str[j+k];++k)
lenth1++;
if(lenth1>lenthmax)
{
index=i;
lenthmax=lenth1;
}
j+=lenth1;
}
else
j++;
}
i++;
}
for(int m=0;m{
a[m]=str[index+m];
}
return index+1;
}
char* substr(int s,int len) //从位置s开始,提取长为len的字符串
{
char *a=new char[len+1];
if(Lenth-s<=len)
{
cout<<"选取的字符串不合理,选取失败"<return a;
}
else
{
for(int i=0;i{
a[i]=str[s++];
}
a[len]='\0';
return a;
}
}

char getstr(int i)
{
return str[i];
}

char* getstr()
{
return str;
}
String &operator =(char *a) //赋值
{
delete []str;
str=new char[strlen(a)+20];
int i=0;
while(a[i]!='\0')
{
str[i++]=a[i];
++Lenth;
}
str[Lenth]='\0';
return *this;
}

char& operator[] (int n)
{
if(n>=Lenth)
{
cout<<"已越界"<return str[Lenth];
}
else
return str[n];
}
friend String operator +(String &temp1,String &temp2); //拼接
friend bool operator <(String &temp1,String &temp2);
friend bool operator >(String &temp1,String &temp2);
friend bool operator <=(String &temp1,String &temp2);
friend bool operator >=(String &temp1,String &temp2);
friend bool operator ==(String &temp1,String &temp2);

private:
char *str;
int Size; //串的总大小
int Lenth; //字符串的长度
};

String operator +(String &temp1,String &temp2)
{
String a(temp1.lenth()+temp2.lenth()+5);
a.strcopy(temp1.getstr());
a.concatenete(temp2.getstr());
a.str[a.Lenth]='\0';
return a;
}

bool operator < (String &temp1,String &temp2)
{
int i=0;
while(temp1.getstr(i)&&temp2.getstr(i))
{
if(temp1.getstr(i)>temp2.getstr(i))
{
return false;
}
else if(temp1.getstr(i)==temp2.getstr(i))
i++;
else if(temp1.getstr(i)>temp2.getstr(i))
return true;
}
if(!temp1.getstr(i)&&temp2.getstr(i))
return true;
else
return false;
}

bool operator > (String &temp1,String &temp2)
{
int i=0;
while(te

mp1.getstr(i)&&temp2.getstr(i))
{
if(temp1.getstr(i)>temp2.getstr(i))
{
return true;
}
else if(temp1.getstr(i)==temp2.getstr(i))
i++;
else if(temp1.getstr(i)return false;
}
if(temp1.getstr(i)&&!temp2.getstr(i))
return true;
else
return false;
}


bool operator ==(String &temp1,String &temp2)
{
int i=0;
while(temp1.getstr(i)&&temp2.getstr(i))
{
if(temp1.getstr(i)==temp2.getstr(i))
{
i++;
}
else
return false;
}
if(!temp1.getstr(i)&&!temp2.getstr(i))
return true;
else
return false;
}
bool operator <=(String &temp1,String &temp2)
{
if(temp1==temp2||temp1return true;
else
return false;
}
bool operator >=(String &temp1,String &temp2)
{
if(temp1==temp2||temp1>temp2)
return true;
else
return false;
}

bool operator !=(String &temp1,String &temp2)
{
if(temp1==temp2)
return false;
else
return true;
}
int strlen(char *c) //返回char型数组的长度
{
int i=0;
while(c[i])
++i;
return i;
}

int main()
{
String m,n;
n="adbcbcbcbc";
m="bc";
char c[20]="";
int a=n.BigRepeat(c);
for(int i=0;c[i];i++)
cout<cout<cout<//cout<//m.strcopy(n.getstr());
//m.concatenete(n.getstr());
//cout</*String x=m+n;
for(int i=0;icout<if(n!=m)
cout<<"true"<else
cout<<"false"<//cout<//cout<//n.deletestr(2,4);
//for(int i=0;i//cout<return 0;
}


相关文档
最新文档