1、 TCHAR *Setm_pstr(TCHAR *p_dest); int Getm_nlen()const; int Getm_nmax()const; TCHAR *Getm_pstr()const; void DisPlay(); /重载 operator TCHAR * (); operator LPCTSTR (); void operator = ( const TCHAR ch ); void operator = ( LPCTSTR p_str ); void operator = ( const MyCString& other ); friend MyCString ope
2、rator + ( const TCHAR ch, const MyCString & friend MyCString operator + ( LPCTSTR p_str, const MyCString & other); friend MyCString operator + ( const MyCString & other1, const MyCString & other2 ); void operator += ( const TCHAR ch ); void operator += ( LPCTSTR p_dest ); void operator += ( const My
3、CString &other ); TCHAR & operator ( int pos ); /查找 int MyFind(const TCHAR ch,int nstart=0); int MyFind(LPCTSTR p_dest,int nstart=0); /替换 int MyReplace(LPCTSTR p_dest,LPCTSTR p_strc); int MyReplace(const TCHAR ch,LPCTSTR p_desc); int MyReplace(LPCTSTR p_desc,const TCHAR ch); int MyReplace(const TCHA
4、R old_ch,const TCHAR new_ch); /比较 相等为0,大于为1,小于为-1; int MyCompare(LPCTSTR p_dest); int MyCompare(MyCString & int MyCompareNotCase(LPCTSTR p_dest);/区分大小写 int MyCompareNotCase(MyCString & /追加 在字符串的尾部 成功返回当前的长度 不成功返回-1; int MyAppend ( const TCHAR ch ); int MyAppend ( LPCTSTR p_str ); int MyAppend ( cons
5、t MyCString & /大小写转换 void MyMakeUpper(TCHAR *p_dest); void MyMakeLower(TCHAR *p_dest); /格式化输出 void MyFormat(TCHAR* fmt, .); /删除函数 int MyRemove ( int n_Start, int n_Num );/nStart 开始处,nNum 多少个数 /插入函数 int MyInsert ( const TCHAR ch,int n_Start );/插入字符,起始位子 int MyInsert ( LPCTSTR p_str,int n_Start );/插入字
6、符串,起始位子 bool MyApply(int n_Num); TCHAR * Mycpy(TCHAR *pstr,TCHAR *pdes); int MyStrcmp(LPCTSTR p_str); int Mycmp(TCHAR *str,TCHAR *dst); /空;#include Mycstring.h/构造函数MyCString:MyCString():m_pstr(NULL),m_nlen(0),m_nmax(0),refCount(NULL) m_pstr=new TCHARNSIZE; memset(m_pstr,0,NSIZE); m_nlen=1; m_nmax=NS
7、IZE; refCount = new int(1);MyCString(const TCHAR ch): m_pstr=new TCHAR1+NSIZE;,1+NSIZE); m_pstr0=ch; m_nlen+=1; m_nmax=1+NSIZE;MyCString(LPCTSTR p_desc): int i=0; int j=0; while(*p_desc!=NULL&p_desci!=) i+; j=i; m_pstr=new TCHARi+NSIZE;,i+NSIZE); for(;i0;i-) m_pstri-1=p_desci-1; m_nlen=j+1; m_nmax=m
8、_nlen+NSIZE;MyCString(const MyCString & other): int i = other.m_nlen; m_pstr = new TCHARi + NSIZE; memset( m_pstr, , i + NSIZE ); m_nmax = i ; m_nlen= i; for( ; i 0 ; i- ) m_pstri-1 = other.m_pstri-1; refCount=other.refCount; +*refCount; m_nmax=other.m_nmax-NSIZE;/析构函数MyCString() if(-*refCount (*ref
9、Count)-; LPCTSTR p=m_pstr; m_pstr=new char m_nmax; memcpy(m_pstr,p,m_nmax);int MyCString:Setm_nlen(int n_Num) m_nlen=n_Num; return m_nlen;Setm_nmax(int n_Num) m_nmax=n_Num; return m_nmax;TCHAR *MyCString:Setm_pstr(TCHAR *p_dest) return Mycpy(m_pstr,p_dest);/获取Getm_nlen()constGetm_nmax()constGetm_pst
10、r()const return m_pstr;/输出DisPlay() cout该字符的详细信息:endl 占有字符为:Getm_nlen()申请空间为:Getm_nmax()字符长度为:Getm_pstr()endl;/查找MyFind(const TCHAR ch,int n_Start) for(i=n_Start;im_nlen;i+) if(m_pstri=ch) return i; return -1;MyFind(LPCTSTR p_dest,int n_Start) int j=-1; int n_len=0; while(*p_dest! *p_dest+; n_len+;
11、int *next = new intn_len+1; next0 = -1; while( i n_len - 1 ) if( j = -1 | p_desti = m_pstrj ) i+; j+; nexti = j; else j = nextj; i = n_Start; j = 0; m_nlen-1 & j n_len ) delete next; if( j m_nmax) delete m_pstr; m_pstr=NULL; m_pstr=new TCHAR i+NSIZE; m_nmax=i+NSIZE;,m_nmax); 0; m_pstri - 1 = p_stri
12、- 1; m_nlen= j; operator = ( const MyCString & other ) if( other.m_nlen = m_nmax ) delete m_pstr; m_pstr = NULL; m_pstr= new TCHARother.m_nmax; m_nmax = other.m_nmax;, m_nmax); for(int i = 0; i j-) temp2j-1=m_pstrj-1; MyMakeLower(temp2); int n=Mycmp(temp1,temp2); delete temp1; delete temp2; return n
13、; int MyCString:MyCompareNotCase(MyCString & while(other.m_pstr!other.m_pstri! temp1i-1=other.m_pstri-1; temp2j-1=other.m_pstrj-1;/尾部追加MyAppend ( const TCHAR ch ) if( m_nlen = m_nmax - 1 )/判断是大于已经申请的范围内 MyApply(0); RefCount(); m_nlen-; m_pstrm_nlen = ch; m_nlen+; m_nmax+; m_pstrm_nlen=MyAppend ( LPC
14、TSTR p_str ) if( p_str = NULL ) return -1; int i = 0; int j = 0;/* TCHAR *p = NULL;*/ while( p_stri != ) j = i; if( m_nlen + i m_nmax - 1 ) MyApply(i); for( i = m_nlen-1 ; m_nlen + j ; m_pstri = p_str i - m_nlen +1 ; m_nlen += j-1; m_nmax+=j;/* m_pstrm_nlen+1=0;MyAppend ( const MyCString & if( m_nle
15、n + other.m_nlen MyApply(other.m_nlen); for(int i=0;=other.m_nlen-1;i+ ) m_pstri+m_nlen-1=other.m_pstri; m_nlen += other.m_nlen-1; m_nmax+=other.m_nmax;/格式化输出; void MyCString:MyFormat(TCHAR* fmt, .) long l_num; TCHAR* p_str; MyCString other; int key; long i = 0; va_list ap; TCHAR ch; va_start(ap,fmt
16、); /以固定参数的地址为起点确定变参的内存起始地址。 while(ch =*(fmt+i)! /首先判断print读取到了什么值 if(*(fmt+i) = % & *(fmt+i+1) = d key = 1;+i; else if(*(fmt+i) = s key = 2; +i; else if(*(fmt+i) = S key = 4; +i; else key = 3; switch(key) /根据类型进行相应的输出 case 1: l_num = va_arg(ap,int); cout l_num; break; case 2: p_str = va_arg(ap,TCHAR*); p_str;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1