码迷,mamicode.com
首页 > 其他好文 > 详细

/*std*/实现mstring类

时间:2015-05-11 19:58:03      阅读:116      评论:0      收藏:0      [点我收藏+]

标签:

//实现mstring类,
//未实现友元函数+,<<,>>
1
#include<cstring> 2 #include<iostream> 3 #include<istream> 4 #include<ostream> 5 class mstring{ 6 friend mstring& operator+(const mstring&str1,const mstring&str2); 7 friend mstring& operator+(const char*str1,const mstring&str2); 8 friend mstring& operator+(const mstring&str1,const char*str2); 9 friend std::ostream&operator<<(std::ostream&os,const mstring&str); 10 friend std::istream&operator>>(std::istream&is,mstring&str); 11 public: 12 mstring(); 13 mstring(char*str); 14 mstring(const mstring& str); 15 mstring(int n); 16 ~mstring(){ 17 delete[]m_data; 18 } 19 mstring& operator=(char*str); 20 mstring& operator=(const mstring&str); 21 bool operator<(const mstring&str)const; 22 bool operator>(const mstring&str)const; 23 bool operator==(const mstring&str)const; 24 void printf()const; 25 int get_length()const{ 26 return strlen(m_data); 27 } 28 mstring substring(int i,int j)const; 29 private: 30 char*m_data; 31 32 }; 33 34 mstring::mstring(){ 35 m_data=new char; 36 *m_data=\0; 37 } 38 mstring::mstring(char*str){ 39 m_data=new char[strlen(str)+1]; 40 strcpy(m_data,str); 41 } 42 mstring::mstring(const mstring&str){ 43 m_data=new char[strlen(str.m_data)+1]; 44 strcpy(m_data,str.m_data); 45 } 46 mstring::mstring(int n){ 47 m_data=new char[n+1]; 48 int i=0; 49 for(i=0;i<n;i++){ 50 m_data[i]=0; 51 } 52 m_data[n]=\0; 53 } 54 mstring& mstring::operator=(char*str){ 55 delete [] m_data; 56 m_data=NULL; 57 m_data=new char[strlen(str)+1]; 58 strcpy(m_data,str); 59 return *this; 60 } 61 mstring& mstring::operator=(const mstring&str){ 62 if(this==&str) return *this; 63 delete []m_data; 64 m_data=NULL; 65 m_data=new char[strlen(str.m_data)+1]; 66 strcpy(m_data,str.m_data); 67 return *this; 68 } 69 bool mstring::operator<(const mstring&str)const{ 70 if(strcmp(this->m_data,str.m_data)<0) return true; 71 else return false; 72 } 73 bool mstring::operator>(const mstring&str)const{ 74 if(strcmp(this->m_data,str.m_data)>0) return true; 75 else return false; 76 } 77 bool mstring::operator==(const mstring&str)const{ 78 if(strcmp(this->m_data,str.m_data)==0) return true; 79 else return false; 80 } 81 82 //mstring operator+(const mstring&str1,const mstring&str2){} 83 84 //mstring operator+(const char*str1,const mstring&str2){} 85 86 //mstring operator+(const mstring&str1,const char*str2){} 87 88 //ostream&operator<<(ostream&str,const mstring&str){} 89 90 //istream&operator>>(istream&str,mstring&str){} 91 92 void mstring::printf()const{ 93 for(int i=0;m_data[i]!=0;i++){ 94 std::cout<<m_data[i]; 95 } 96 std::cout<<std::endl; 97 } 98 99 mstring mstring::substring(int i,int j)const{ 100 int strlength=strlen(this->m_data); 101 if(i>j||i>strlength-1||j<0){ 102 mstring mtemp; 103 return mtemp; 104 } 105 if(i<0) i=0; 106 if(j>strlength-1) j=strlength-1; 107 mstring mtemp(j-i+1); 108 int index=0,k=0; 109 for(index=0;index<=strlength-1;index++){ 110 if(index>=i&&index<=j) 111 { 112 mtemp.m_data[k++]=this->m_data[index]; 113 } 114 } 115 return mtemp; 116 } 117 118 int main(){ 119 mstring ms,ms2,ms3; 120 ms="adbc"; 121 ms2=ms; 122 ms.printf(); 123 ms2.printf(); 124 std::cout<<ms.get_length(); 125 std::cout<<std::endl; 126 ms3=ms2.substring(1,5); 127 ms3.printf(); 128 return 0; 129 }

 

/*std*/实现mstring类

标签:

原文地址:http://www.cnblogs.com/liji5112/p/4495361.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!