zoukankan      html  css  js  c++  java
  • 忙了一天,终于差不多了

    扒了一天的 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

     
  • 相关阅读:
    xcode
    2020上班第一天
    动态网页爬取方法
    静态网页爬虫获取数据的简单方法Xpath
    帆软9.0升级10.0(摘自帆软官方文档)
    linux下安装redis
    linux 命令笔记
    shell 编写mongodb linux下安装脚本
    pl/sql基础之三
    plsql基础二之集合
  • 原文地址:https://www.cnblogs.com/suanguade/p/4038150.html
Copyright © 2011-2022 走看看