2020-12-29

有关一个字符串类的有关功能的实现

这是我最近学习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;
}

这是我的第一篇博客昂,希望我以后也能坚持下去 ,下一个就学习前置++和后置++叭,还有全局变量的使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值