程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> 實戰c++中的string系列--CDuiString和string的轉換(duilib中的cduistring)

實戰c++中的string系列--CDuiString和string的轉換(duilib中的cduistring)

編輯:C++入門知識

實戰c++中的string系列--CDuiString和string的轉換(duilib中的cduistring)


使用所duilib的人定會知道cduistring類型,先看看這個類是怎麼定義的:

class UILIB_API CDuiString
    {
    public:
        enum { MAX_LOCAL_STRING_LEN = 127/*63*/ };

        CDuiString();
        CDuiString(const TCHAR ch);
        CDuiString(const CDuiString& src);
        CDuiString(LPCTSTR lpsz, int nLen = -1);
        ~CDuiString();

        void Empty();
        int GetLength() const;
        bool IsEmpty() const;
        TCHAR GetAt(int nIndex) const;
        void Append(LPCTSTR pstr);
        void Assign(LPCTSTR pstr, int nLength = -1);
        LPCTSTR GetData() const;

        void SetAt(int nIndex, TCHAR ch);
        operator LPCTSTR() const;

        TCHAR operator[] (int nIndex) const;
        const CDuiString& operator=(const CDuiString& src);
        const CDuiString& operator=(const TCHAR ch);
        const CDuiString& operator=(LPCTSTR pstr);
#ifdef _UNICODE
        const CDuiString& CDuiString::operator=(LPCSTR lpStr);
        const CDuiString& CDuiString::operator+=(LPCSTR lpStr);
#else
        const CDuiString& CDuiString::operator=(LPCWSTR lpwStr);
        const CDuiString& CDuiString::operator+=(LPCWSTR lpwStr);
#endif
        CDuiString operator+(const CDuiString& src) const;
        CDuiString operator+(LPCTSTR pstr) const;
        const CDuiString& operator+=(const CDuiString& src);
        const CDuiString& operator+=(LPCTSTR pstr);
        const CDuiString& operator+=(const TCHAR ch);

        bool operator == (LPCTSTR str) const;
        bool operator != (LPCTSTR str) const;
        bool operator <= (LPCTSTR str) const;
        bool operator <  (LPCTSTR str) const;
        bool operator >= (LPCTSTR str) const;
        bool operator >  (LPCTSTR str) const;

        int Compare(LPCTSTR pstr) const;
        int CompareNoCase(LPCTSTR pstr) const;

        void MakeUpper();
        void MakeLower();

        CDuiString Left(int nLength) const;
        CDuiString Mid(int iPos, int nLength = -1) const;
        CDuiString Right(int nLength) const;

        int Find(TCHAR ch, int iPos = 0) const;
        int Find(LPCTSTR pstr, int iPos = 0) const;
        int ReverseFind(TCHAR ch) const;
        int Replace(LPCTSTR pstrFrom, LPCTSTR pstrTo);

        int __cdecl Format(LPCTSTR pstrFormat, ...);
        int __cdecl SmallFormat(LPCTSTR pstrFormat, ...);

    protected:
        LPTSTR m_pstr;
        TCHAR m_szBuffer[MAX_LOCAL_STRING_LEN + 1];
    };

下面使用方法:

1 Append(LPCTSTR str) 在原字符串基礎上追加一個字符串;   
CDuiString  dui_str;   
dui_str.Append(_T("我是中國人!"));   
dui_str.Append(_T("我愛中國!"));     

2 Assign(LPCSTR pstr ,int nLength ) 在pstr字符串的nLength位置後的東西全部剪切掉不要;   config.Assign(config, config.GetLength()-1);   

3 Format(LPCSTR pstrformat, ...); 按照pstrformat字符串的格式,導入其他類型變量    
CDuiString folde_path;   folde_path.Format(_T("%ls"), std_string); 

4 GetLength()采集一個變量的寬度(大小);   
config.GetLength();

很多時候 難免用到CDuiString和string的轉換。

我們應該注意到,CDuiString類有個方法:

LPCTSTR GetData() const;

可以通過這個方法,把CDuiString變為LPCTSTR ;
所以下一步只是如何把LPCTSTR 轉為string了。

首先寫一個StringFromLPCTSTR函數,完成轉換:

std::string StringFromLPCTSTR(LPCTSTR str) {
#ifdef _UNICODE
    int size_str = WideCharToMultiByte(CP_UTF8, 0, str, -1, 0, 0, NULL, NULL);

    char* point_new_array = new char[size_str];

    WideCharToMultiByte(CP_UTF8, 0, str, -1, point_new_array, size_str, NULL, NULL);

    std::string return_string(point_new_array);
    delete[] point_new_array;
    point_new_array = NULL;
    return return_string;
#else
    return std::string(str);
#endif
}

下面就可以完成duicstring到string的轉換了:

CDuiString download_link = msg.pSender->GetUserData();
std::string download_link_str = StringFromLPCTSTR(download_link.GetData());

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved