核心編程隨筆1
最理想的比較字符串函數是CompareString(Ex)和CompareStringOrdinal。對於需要以符合用戶語言習慣的方式向用戶顯示的字符串,請用CompareString(Ex)進行比較。CompareString函數的原型如下:
int CompareString(
LCID locale, //LCID GetThreadLocale();
DWORD dwCmdFlags,
PCTSTR pString1,
int cch1, PCTSTR pString2,
int cch2);
CompareString函數所用的標誌
標誌 含義
NORM_IGNORECASE
LINGUISTIC_IGNORECASE 忽略大小寫
NORM_IGNOREKANATYPE 不區分平假名和片假名字符
NORM_IGNORENONSPACE
LINGUISTIC_IGNOREDIACRITIC 忽略non-spacing字符(譯者注:non-spacing字符通常是一些讀音符號)
NORM_IGNORESYMBOLS 忽略符號
NORM_IGNOREWIDTH 不區分同一個字符的單字節和雙字節形式
SORT_STRINGSORT 標點符號當成符號來處理
Note 2:
CompareStringOrdinal可以用來比較編程類的字符串(如路徑名、注冊表項/值、XML元素/屬性等等),如下所示:
int CompareStringOrdinal(
PCWSTR pString1,
int cchCount1,
PCWSTR pString2,
int cchCount2,
BOOL bIgnoreCase);
函數執行的是碼位(code-point)比較,不考慮區域設置,所以速度很快。另外,由於編程類的字符串一般不會向最終用戶顯示,所以在這種情況下,最適合使用這個函數。注意,此函數隻支持Unicode字符串。
Note 3:
CompareString(Ordinal)返回0表明函數調用失敗,返回CSTR_LESS_THAN(定義為1)表明pString1小於pString2,返回CSTR_EQUAL(定義為2)表明pString1等於pString2,返回CSTR_GREATER_THAN(定義為3)表明pString1大於pString2。為方便起見,如果函數成功,你可以從返回值中減去2,使結果值與C運行庫函數的結果值(-1,0和+1)保持一致。
應該遵循的基本準則:
最後更新:2017-04-03 15:22:09