1. 程式人生 > >c++漢字按拼音排序

c++漢字按拼音排序

dwFlags:一組位標記用以指出是否未轉換成預作或寬字元(若組合形式存在),是否使用象形文字替代控制字元,以及如何處理無效字元。你可以指定下面是標記常量的組合,含義如下:

  MB_PRECOMPOSED:通常使用預作字元——就是說,由一個基本字元和一個非空字元組成的字元只有一個單一的字元值。這是預設的轉換選擇。不能與

  MB_COMPOSITE值一起使用。

  MB_COMPOSITE:通常使用組合字元——就是說,由一個基本字元和一個非空字元組成的字元分別有不同的字元值。這是預設的轉換選擇。不能與MB_PRECOMPOSED值一起使用。

  MB_ERR_INVALID_CHARS:如果函式遇到無效的輸入字元,它將執行失敗,且GetLastErro返回ERROR_NO_UNICODE_TRANSLATION值。

  MB_USEGLYPHCHARS:使用象形文字替代控制字元。

  組合字元由一個基礎字元和一個非空字元構成,每一個都有不同的字元值。每個預作字元都有單一的字元值給基礎/非空字元的組成。在字元è中,e就是基礎字元,而重音符標記就是非空字元。

  函式的預設動作是轉換成預作的形式。如果預作的形式不存在,函式將嘗試轉換成組合形式。

  標記MB_PRECOMPOSED和MB_COMPOSITE是互斥的,而標記MB_USEGLYPHCHARS和MB_ERR_INVALID_CHARS則不管其它標記如何都可以設定。

lpWideCharStr:指向將被轉換的unicode字串。 cchWideChar
:指定由引數lpWideCharStr指向的緩衝區的字元個數。如果這個值為-1,字串將被設定為以NULL為結束符的字串,並且自動計算長度。 lpMultiByteStr:指向接收被轉換字串的緩衝區。 cchMultiByte:指定由引數lpMultiByteStr指向的緩衝區最大值(用位元組來計量)。若此值為零,函式返回lpMultiByteStr指向的目標緩衝區所必需的位元組數,在這種情況下,lpMultiByteStr引數通常為NULL。 lpDefaultCharpfUsedDefaultChar:只有當WideCharToMultiByte函式遇到一個寬位元組字元,而該字元在uCodePage引數標識的
內碼表
中並沒有它的表示法時,WideCharToMultiByte函式才使用這兩個引數。如果寬位元組字元不能被轉換,該函式便使用lpDefaultChar引數指向的字元。如果該引數是NULL(這是大多數情況下的引數值),那麼該函式使用系統的預設字元。該預設字元通常是個問號。這對於檔名來說是危險的,因為問號是個萬用字元。pfUsedDefaultChar引數指向一個布林變數,如果Unicode字元串中至少有一個字元不能轉換成等價多位元組字元,那麼函式就將該變數置為TRUE。如果所有字元均被成功地轉換,那麼該函式就將該變數置為FALSE。當函式返回以便檢查寬位元組字串是否被成功地轉換後,可以測試該變數。 返回值:如果函式執行成功,並且cchMultiByte不為零,返回值是由 lpMultiByteStr指向的緩衝區中寫入的位元組數;如果函式執行成功,並且cchMultiByte為零,返回值是接收到待轉換字串的緩衝區所必需的位元組數。如果函式執行失敗,返回值為零。若想獲得更多錯誤資訊,請呼叫GetLastError函式。它可以返回下面所列錯誤程式碼: ERROR_INSUFFICIENT_BJFFER;ERROR_INVALID_FLAGS; ERROR_INVALID_PARAMETER;ERROR_NO_UNICODE_TRANSLATION。 注意:指標lpMultiByteStr和lpWideCharStr必須不一樣。如果一樣,函式將失敗,GetLastError將返回ERROR_INVALID_PARAMETER的值。  Windows CE:不支援引數CodePage中的CP_UTF7和CP_UTF8的值,以及引數dwFlags中的WC_NO_BEST_FIT_CHARS值. 例子:WideCharToMultiByte(CP_ACP , WC_COMPOSITECHECK , UNICODEString , -1 ,szANSIString ,  sizeof(szANSIString) , NULL ,NULL) ; 對於緩衝區一般取ANSI字串的長度即可 3.size_t wcstombs(char *dest, const wchar_t *src, size_t n); #include <stdlib.h> 如dest 非NULL,則wcstombs() function把寬字元src轉換成多字元dest,最多轉換n個位元組(這裡的n是轉換後dest的位元組數)。
轉換成功,返回轉換的位元組數(不包括非0字元),不成功返回(size_t)(-1)。
注意:在呼叫前,要指明多字元的內碼表 #include <locale>之後 wcstombs呼叫前加上setlocale(LC_ALL, ".936");即可 好像其他的方法來轉換,如CString的相關方法,我試了一下好像出現亂碼,還有就是ATL巨集轉換(沒試過)。 以上三種方式應該能大致實現功能了。