忙了一天,终于差不多了

扒了一天的 CString 代码,结果扒出了这么个东西。

感觉很不错,去除了很多束缚,让编程方法更灵活,所以有些地方显得不严谨,封装性不是很好,但是我自己用,方便就可以了。

唯一的缺点就是不能和 CString 互用。不能直接从MFC中当成CString 来 GetWindowsTextA / W,否则,就我的应用情况,可以完全替代CString。

CString 的命名,CString 的风格,却不是MFC的东西,希望能跨到Linux上用。

以前Linux上,就QT的 QString 比较智能,ATL的CString 在Linux上无法用,很早就想自己写一个,现在写完了,准备到Linux上试试看。

很多部分的关键实现是扒 CString 内部的实现方法照搬过来的,部分简单的实现是自己写的。

 

 


#ifndef _CLASS_MYSTRING_
#define _CLASS_MYSTRING_

#ifdef UNICODE
 #define CMyString CMyStringW
#else
 #define CMyString CMyStringA
#endif

class CMyStringW
{
public:
 CMyStringW();
 ~CMyStringW();

 CMyStringW( wchar_t *str , int nFrom , int nCount );
 CMyStringW( wchar_t *str );
 CMyStringW( wchar_t *str1 , wchar_t *str2 );

private:
 wchar_t * m_pStr;

private:
 int StrCmp( wchar_t *str );

public:
 CMyStringW& operator=( wchar_t *str );
 CMyStringW& operator=( CMyStringW& str ){ return ((*this) = (wchar_t*) str); }

 friend int operator==( wchar_t *str , CMyStringW& mstr ) { return mstr.StrCmp( str ); }
 friend int operator==( CMyStringW& mstr , wchar_t *str ) { return mstr.StrCmp( str ); }

 friend CMyStringW operator+( CMyStringW& str1 , wchar_t * psz2 ) { return ( CMyStringW( str1.m_pStr , psz2 ) ); }
 friend CMyStringW operator+( wchar_t * psz1 , CMyStringW& str2 ) { return ( CMyStringW( psz1 , str2.m_pStr ) ); }

 operator wchar_t*(){ return m_pStr;  }
 //operator LPCWSTR(){  return m_pStr;  }

 wchar_t operator[]( int i ) { return GetAt(i); }

 int GetLength( wchar_t * str = 0 );
 wchar_t GetAt( int i );
 wchar_t SetAt( int i , wchar_t wch );
 int Find( wchar_t ch , int nStart = 0 );
 int Find( wchar_t *pStr , int nStart = 0 );
 int Delete( int index , int nCount = 1 );
 void Format( wchar_t* pszFormat, ... );
 CMyStringW Left( int nCount );
 CMyStringW Right( int nCount );
 CMyStringW Mid( int index , int nCount );
};

class CMyStringA
{
public:
 CMyStringA();
 ~CMyStringA();
 CMyStringA( char *str , int nFrom , int nCount );
 CMyStringA( char *str );
 CMyStringA( char *str1 , char *str2 );

private:
 char * m_pStr;

private:
 int StrCmp( char *str );

public:
 CMyStringA& operator=( char *str );
 CMyStringA& operator=( CMyStringA& str ){ return ((*this) = (char*) str); }

 friend int operator==( char *str , CMyStringA& mstr ) { return mstr.StrCmp( str ); }
 friend int operator==( CMyStringA& mstr , char *str ) { return mstr.StrCmp( str ); }

 friend CMyStringA operator+( CMyStringA& str1 , char * psz2 ) { return ( CMyStringA( str1.m_pStr , psz2 ) ); }
 friend CMyStringA operator+( char * psz1 , CMyStringA& str2 ) { return ( CMyStringA( psz1 , str2.m_pStr ) ); }

 operator char*(){ return m_pStr;  }

 wchar_t operator[]( int i ) { return GetAt(i); }

 int GetLength( char * str = 0 );
 char GetAt( int i );
 char SetAt( int i , char wch );
 int Find( char ch , int nStart = 0 );
 int Find( char *pStr , int nStart = 0 );
 int Delete( int index , int nCount = 1 );
 void Format( char* pszFormat, ... );
 CMyStringA Left( int nCount );
 CMyStringA Right( int nCount );
 CMyStringA Mid( int index , int nCount );
};

#endif

 

 

posted @ 2014-10-20 16:18  穷到底  阅读(163)  评论(0编辑  收藏  举报