忙了一天,终于差不多了
扒了一天的 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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」