有关一个字符串类的有关功能的实现
这是我最近学习c++面向对象的一些小小的记录啊
功能:无参构造函数,有参构造函数(需要判断是否为0,以及new一段空间)深拷贝 重载+ 重载输入输出运算符(友元函数)析构函数 返回字符串的长度 比较Mystring 与Mystring 比较Mystring与常量字符串 从左往右输出一定长度的字符串 翻转 等等(未完待续 有时间了继续添加功能嘿嘿嘿)
在#include<iostream>
#include<string.h>
using namespace std;
class Mystring{
public:
Mystring(){
str=NULL;
length=0; //无参构造函数
};
Mystring(char* s){
if(s==NULL){
str=new char[1];
str[0]='\0';
length=0; //有参构造函数
}
else
{
length=strlen(s);
str=new char[strlen(s)+1];
strcpy(str,s);
}
};
Mystring(const Mystring& S0){
if(S0.str==NULL){
str=new char[1];
str[0]='\0';
length=0;
}
else
{
length=S0.length;
str=new char[strlen(S0.str)+1]; //深拷贝函数
strcpy(str,S0.str);
}
}
const Mystring &operator+(const Mystring& s){ //重载+号
int l=length+s.length;
char* temp=new char[l+1];
strcpy(temp,str);
strcat(temp,s.str);
/*str=temp;
return *this;*/
return temp;
}
friend istream& operator>>(istream& input,Mystring& s){ //重载输入运算符
char tmp[100]={0};
input>>tmp;
s.length=strlen(tmp);
s.str= new char[s.length];
strcpy(s.str,tmp);
return input;
}
friend ostream& operator<<(ostream& output,Mystring& s){ //重载输出运算符
output<< s.str<<" "<<s.length;
return output;
}
~Mystring(){ //析构函数
delete [] str;
}
int len(){ //返回字符串的长度
int Strlen=strlen(str);
return Strlen;
}
int judge1(Mystring&s){ //比较Mystring 与Mydtring num=1则str>s.str num=0,则相等 num=-1,则str<s.str
int num=0;
num=strcmp(str,s.str);
return num;
}
int judge2(char* s){ //比较Mystring与字符常量 num=1则str>s.str num=0,则相等 num=-1,则str<s.str
int num=0;
num=strcmp(s,str);
return num;
}
string re_left(int num){
if(num>length)cout <<"ERRO";
else{
char* s; //从左往右到一个节点
int i=0;
for(i=0;i<num;i++){
s[i]=str[i];
}
return s;
}
}
string re_right(int num){ //从左往右一个节点到结束
if(num>length)cout <<"ERRO";
else{
char* s=new char[length-num];
int i=num-1;
int j=0;
for(;i<length;i++){
s[j]=str[i];
j++;
}
return s;
}
}
string inverse(){ //翻转
int i=length-1;
char* s=new char[length];
int j=0;
for(;i>=0;i--){
s[j]=str[i];
j++;
}
return s;
}
void put(){
cout << str<<" "<<length; //打印输出Mystring
}
char* str;
int length;
};
int main(){
Mystring S1;
Mystring S2=("abcde");
cout << S2<<endl;
cout <<"**************"<<endl;
cin >>S1;
cout << S1<<endl;
cout <<"**************"<<endl;
Mystring S3(S2);
cout << S3<<endl;
cout << "*************"<<endl;
Mystring S4=S1+S2;
cout << S4<<endl;
cout <<"**************"<<endl;
int len=0;
len=S1.len();
cout << len<<S1<<" ";
len=S2.len();
cout << len<<" ";
len=S4.len();
cout <<len<<endl;
cout << "*************"<<endl;
Mystring S5("a");
int b=S5.judge1(S1);
if(b==0) cout << "S5=S1"<<endl;
if(b==1) cout << "S5>S1"<<endl;
if(b==-1) cout << "S5<S1"<<endl;
cout << "*************"<<endl;
cout << S2.re_left(2)<<endl;
cout << S2.re_right(2)<<endl;
cout <<"**************"<<endl;
Mystring S6("abcdefg");
cout <<S6.inverse()<<endl;
cout <<"end"<<endl;
return 0;
}
这是我的第一篇博客昂,希望我以后也能坚持下去 ,下一个就学习前置++和后置++叭,还有全局变量的使用。