Cpp--处理字符串的自定义类


关于拷贝函数建立的处理字符串的函数,比较实用,贴上来供大家学习:

#include<iostream>
using namespace std;
class myString2{
	char *str;
	int len;
public:
	myString2(char *s);
	myString2(myString2& str);
	~myString2();
	void strOut();
	void strCat(myString2 str2);
	int strCmp(myString2 str2);
};
myString2::myString2(char *s){   
	char *tmp=s;
	while(*tmp++);
	int sLen=tmp-s;
	str=new char[sLen+1];
	int i=0;
	while(s[i]){
		str[i]=s[i];
		i++;
	}
	str[i]='\0';
	len=i;
}
myString2::myString2(myString2&s){  //拷贝构造函数
	int sLen=s.len;
	str= new char[sLen+1];
	int i=0;
	while(s.str[i]){
		str[i]=s.str[i];
		i++;
	}
	str[i]='\0';
	len=i;
}
myString2::~myString2(){ 
	if(str!=NULL)
		delete []str;
}
void myString2::strOut(){
	if(str!=NULL)
		cout<<"str="<<str<<endl;
	else
		cout<<"empty!"<<endl;
}
void myString2::strCat(myString2 str2){   //将str2连接到str后,先申请一个新空间储存
	int newLen;  //str新长度
	char *tmp,*head;
	newLen=len+str2.len;
	tmp=new char[newLen+1];  //动态申请恰好的空间放字符串
	head=tmp;
	int j=0;
	if(str!=NULL){   //调用者对象str串不为空,放入新申请的空间中。释放调用者对象的原str串空间。
		while(str[j])
			*tmp++=str[j++];
		delete str;
	}
	j=0;
	while(str2.str[j])
		*tmp++=str2.str[j++];
	*tmp='\0';
	len=newLen;
	str=head;
}
int myString2::strCmp(myString2 str2){   //两字符串相比较
	int i=0;
	while(str[i]!='\0'&&str2.str[i]!='\0'){
		if(str[i]>str2.str[i])
			return 1;
		if(str[i]<str2.str[i])
			return -1;
		i++;
	}
	if(str[i]=='\0'&&str2.str[i]=='\0')
		return 0; //字符完全相同
	if(str[i]!='\0')
		return 1;  //str串大(str串未结束)
	else
		return -1;
}
void main()
{
	myString2 obj1("12345");  //通过类对象对成员函数进行调用
	myString2 obj2("abcdefg");
	myString2 obj3("333");
	myString2 obj4=obj2;    //必须情况之一,调用拷贝构造函数
	cout<<"obj1: ";obj1.strOut();
	cout<<"obj2: ";obj2.strOut();
	cout<<"obj3: ";obj3.strOut();
	cout<<"obj4: ";obj4.strOut();  
	obj1.strCat(obj2);//实参为类对象,调用拷贝构造函数
	cout<<"obj1=>"; obj1.strOut();
	obj2.strCat(obj3);
	cout<<"obj2=>"; obj2.strOut();
	int i=obj1.strCmp(obj1);
	cout<<"i="<<i;
	i=obj1.strCmp(obj3);cout<<"  i="<<i;
	i=obj3.strCmp(obj1);cout<< "  i="<<i<<endl;
}





结果:








  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值