字元與字串 windows核心程式設計

2021-05-17 11:50:45 字數 3680 閱讀 2642

1,字元編碼

utf-8:(unicode transformation format (unicode轉換格式))

0x0080 以下的字元壓縮為1個位元組

0x0080~0x07ff 之間的字元轉換成2個位元組

0x0800 以上的字元轉換為3個位元組

**對(surrogate pair)被寫為4個位元組。

utf-16:

utf-32:

每個字元都編為4個位元組。

編碼演算法簡單,但是儲存檔案和網路傳輸效率低,一般用於應用程式內部。

unicode 字符集和字母表

6位** 字元 16位** 字母/書寫符號

0000~007f ascii   0300~036f 常見的變音符號

0080~00ff 西歐語系字母 0400~04ff 西里爾字母

0100~017f 歐洲拉丁字母 0530~058f 亞美尼亞文

0180~01ff 擴充拉丁字母 0590~05ff 希伯來文

0250~02af 標準音標 0600~06ff 阿拉伯文

02b0~02ff 進格修飾字母 0900~097f 梵文本母

2,ansi字元和unicode字元與字串資料型別

8位ansi字元 char

16位 unicode字元 wchar_t

在中有 typedef unsigned short wchar_t;

宣告unicode字元和字串的方法:

wchar_t c=l'a';

wchar_t szbuffer[100]=l"a string";

l通知編譯器該字元為unicode

中有如下定義:

typedef char char;

typedef wchar_t wchar;

typedef cahr * pchar;

typedef char * pstr;

typedef const char * pcstr;

typedef wchar * pwchar;

typedef wchar * pwstr;

typedef const wchar * pcwstr;

另外乙個可以自己再研究的問題:(頭部註解)

typedef __nullterminated wchar * nwpstr,* lpwstr,* pwstr;

#ifdef unicode

typedef const wchar * pctstr;

#define __text(quote) quote //r_winnt

#define __text(quote) l##quote

/*關於##的內容:

使用:tchar szbuffer[100]=text("a string");

3,windows中的unicode函式和ansi函式

如:(注意函式結尾的w和a) 呼叫的時候沒有,內部定義

hwnd winapi createwindowexw();

hwnd winapi createwindowexa();

#ifdef unicode

#define createwindowex createwindowexw //代表寬位元組函式

#else

#define createwindowex createwindowexa //代表ansi函式

#endif

4,c執行庫中的unicode函式和ansi函式

#ifdef _unicode

#define _tcslen wcslen

#else

#define _tcslen strlen

#endif

_unicode和unicode,c執行庫始終會為它們加下劃線字首的。

5,c執行庫中的安全字串函式

為了防止緩衝區溢位等一系列問題,windows採取了一些措施。

ptstr _tcscpy(ptstr strdestination,pctstr strsource);

errno_t_tcscpy_s(ptstr strdestination,size_tnumberofcharacters,pctstr strsource);

ptstr _tcscat(ptstr strdestination,pctstr strsource);

errno_t_tcscat_s(ptstr strdestination,size_tnumberofcharacters,pctstr strsource);

這兩個函式的第二個版本都帶有_s(secure)字尾,都帶有緩衝區的大小,是字元數,而不是sizeof關係,應該用_countof巨集(stdlib.h)得到。

6,處理字串的更多控制

hresultstringcchcat(ptstr pszdest,size_t cchdest,pctstr pszsrc);

hresultstringcchcatex(ptstr pszdest,sze_t cchdest,pctstr pszsrc,ptstr * ppszdestend,size_t * pcchremaining,dword dwflags);

hresultstringcchcopy(ptstr pszdest,size_t cchdest,pctstr pszsrc);

hresultstringcchcopyex(ptstr pszdest,sze_t cchdest,pctstr pszsrc,ptstr * ppszdestend,size_t * pcchremaining,dword dwflags);

hresultstringcchprintf(ptstr pszdest,size_t cchdest,ptstr pszformat,...);

hresultstringcchprintfex(ptstr pszdest,size_t cchdest,ptstr * ppszdestend,size_t * pcchremaining,dword dwflags,pctstr pszformat,...);

cch 表示 count of characters 字元數 _countof 巨集得到

另外有:

stringcbcat(ex)

stringcbcopy(ex)

strigcbprintf(ex)

核心字串

實驗任務 給你乙個長度為 n,只包含小寫字母的字串 a0a1a2 an 1 它的核心字串定義 為最短的且包含全部 26 個小寫字母的子串。這樣的子串可能沒有,也可能只有乙個,還有 可能有多個,所以你只需要輸出它的長度,如果沒有這樣的輸出 1 即可。注意 乙個字元 串 a0a1a2 an 1 的子串是...

Windows核心程式設計 第2章 字元和字串處理

第2章 字元和字串處理.cpp 定義應用程式的入口點。include stdafx.h include 第2章 字元和字串處理.h include strsafe.h int apientry wwinmain in hinstance hinstance,in opt hinstance hpre...

陣列與字串核心方法

陣列中最重要的乙個方法 splice 可以實現向陣列中新增 刪除 修改元素 用法 splice index,num,element1,element2.index為從第幾個元素開始執行增加 刪除 num為增加 刪除多少個元素 element1和element2為可選引數,依賴於num demo va...