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

来源:互联网 发布:网络营销推广软件 编辑:程序博客网 时间:2024/05/16 19:32

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

#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;elsecout<<"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串未结束)elsereturn -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 0
原创粉丝点击