📄 string1.h
字号:
#include<iostream.h>
#include<string.h>
class String1
{
private:
char *table;
int len;
public:
String1(char *str="");
String1(char ch);
String1(const String1 &s);
~String1();
int length();
char charAt(int i);
void output();
void concat(char *str2);
void concat(const String1 &s2);
String1& operator=(char *str);
String1& operator=(String1 &s1);
friend ostream & operator<<(ostream & out,String1 &s);
int operator==(char *str);
int operator==(String1 &s2);
String1 & operator+=(String1 &s2);
String1 operator+(String1 &s2);
String1 subString(int i,int n);
String1 insert(int i,String1 &s2);
String1 reverse();
String1 remove(int i,int n);
int String1::indexof(String1 &sub,int start=0);
int indexof(char ch,int start=0);
String1 replace (String1 &oldstr,String1 &newstr);
};
String1::String1(char *str)
{
len=strlen(str);
table=new char[len+1];
strcpy(table,str);
}
String1::String1(char ch)
{
len=1;
table=new char[len+1];
table[0]=ch;
table[1]='\0';
}
String1::String1(const String1 &s)
{
len =s.len ;
table=new char[len+1];
strcpy(table,s.table);
}
String1::~String1()
{
delete[] table;
len=0;
}
//求串长度
int String1::length()
{
return len;
}
////取字符
char String1::charAt(int i)
{
if(i>0&&i<=len)
return table[i-1];
else
return -1;
}
//////////输出串
void String1::output()
{
cout<<"s.len="<<len<<" ";
cout<<"s.table="<<table;
if(table[len]==0)
cout<<'0';
cout<<endl;
}
///连接两串
void String1::concat(char *str)
{
char *p=this->table;
int n1=len,n2=strlen(str);
len =n1+n2;
table=new char[len+1];
table=strcpy(table,p);
for(int i=0;i<n2;i++)
table[i+n1]=str[i];
table[len]='\0';
}
void String1::concat(const String1 &s2)
{
concat(s2.table);
}
////////////////////////////////////////////////////
///////////////////////////////////////////////////
///重载=
String1& String1::operator = (char *str)
{
len=strlen(str);
table=new char[len+1];
strcpy(table,str);
return *this;
}
String1& String1::operator = (String1 &s1)
{
delete []table;
len=s1.length ();
table=new char[len+1];
strcpy(table,s1.table );
return *this;
}
//重载<<
ostream & operator<<(ostream & out,String1 &s)
{
out<<s.table ;
return out;
}
//重载=
int String1::operator==(char *str)
{
return (strcmp(table,str));
}
int String1::operator==(String1 &s2)
{
return (strcmp(table,s2.table));
}
//重载+= +
String1& String1::operator += (String1 &s2)
{
String1 s1=*this;
int n1=s1.length ();
int n2=s2.length ();
len=n1+n2;
table=new char[len+1];
strcpy(table,s1.table );
for(int i=0;i<n2;i++)
table[n1+i]=s2.table[i];
table[len]='\0';
return *this;
}
String1 String1::operator + (String1 &s2)
{
String1 news1=*this;
news1+=s2;
return news1;
}
String1 String1::subString(int i,int n)
{
String1 sub;
if(i<=0) i=1;
if(i>len || n==0)
return sub;
delete []sub.table;
sub.len=n;
if(n>len-i+1)
sub.len =len-i+1;
sub.table =new char[sub.len+1];
i--;
for(int j=0;j<sub.len ;j++)
sub.table [j]=table[i+j];
sub.table [sub.len]='\0';
return sub;
}
////////有问题
/*
int String1::indexof (char ch,int start)
{
String1 sub(ch);
return this->indexof (sub,start);
}*/
//////插入子串
String1 String1::insert(int i,String1 &s2)
{
return subString(1,i-1)+s2+subString(i,len-i+1);
}
//删除子串
String1 String1::remove(int i,int n)
{
return subString(1,i-1)+subString(i+n,len-1-n+1);
}
//串的逆转
String1 String1::reverse ()
{
String1 news1;
for(int i=len ;i>=1;i--)
{
news1+=subString(i,1);
}
return news1;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -