初學者MFC下字串的使用 略解字元體系

2021-07-04 15:11:34 字數 2479 閱讀 7422

程式設計中天天接觸字串,遇到無數問題之後我意識到在mfc中字串這個東西要比我想像複雜的多,偏偏還是個必需品,想想還是一次搞清以絕後患吧……

實踐中字串主要會涉及到字符集的相容,不同字串型別之間的轉換的問題,本文即針對此兩點。

先從字符集的角度看字元和字串

上個表:c++對字符集的支援

c++字元型別

字符集種類

字符集wchar_t

寬字元unicode

char

多位元組mbcs

ansi

char

單位元組sbcs

ascii

在mfc程式設計中

我們見到的字元型別表示常是這幾個巨集定義tchar,char,wchar。

從字符集角度來看char等同於char,wchar等同於wchar_t,tchar會根據專案所用字符集在前兩者間自動轉換。同理,在vc++程式設計中常能見到帶t,a,w字母的型別、巨集或函式命名,它們的區別也一樣。如表:

寬字元(wide)

cstringw

l『char』

l」str」 ……

多位元組(ansi)

cstringa

『char』

「str」 ……

自轉換(translate)

cstring

_t(『char』)

_t(「str」) ……

那到底字符集對程式設計有什麼影響呢。在專案屬性裡有字符集的選項,這個選項會定義巨集_mbcs或_unicode(msdn說的,我在專案中沒找到,只在winnt.h中找到以unicode為條件對字元(串)的定義),它本身並不會導致程式出錯,但是自轉換的那些字元(串)發生了改變,當不同字符集的字元(串)之間賦值(或其它溝通)時就會提示不能轉換的錯誤。所以說,如果程式中的字元(串)都是自轉換的,那專案字符集設定就隨意了。

再看各式各樣讓人頭疼的字串

msdn上的一句話:可以轉換的字串型別包括char*、wchar_t*、_bstr_t、ccombstr、cstring、basic_string、和string。vc++中的字串真是多啊,有一些是跟com程式設計相關的,string是.net的型別(需開啟clr支援),本文只討論mfc。其實在mfc中從結構角度看主要就3種字串:

c風格字串

字元陣列

lpcstr,lpctstr等

c++標準字串

basic_string模版類

string,wstring

#include

mfc封裝字串

cstringt模版類

csting,cstringa,cstringw

#include 「afxstr.h」

綜合字符集和結構的角度字串有這些

寬字元

多位元組

自轉換

c風格

lpcwstr

lpcstr

lpctstr

c++標準

wstring

string

mfc封裝

cstringw

cstringa

cstring

附:字串常量(實際也是c風格的)

l「example」

「example」

_t(「example」)

結構的角度 各字串間轉換

lpctstr arrstr = _t("hello");

cstring mfcstr = _t("hello");

string stdstr = _t("hello");

//const char*

源cstring mfcfrmarr = arrstr;

string stdfrmarr = arrstr;

//cstring

源string stdfrmmfc = mfcstr;

lpctstr arrfrmmfc = (lpctstr)mfcstr;

//string

源lpctstr arrfrmstd = stdstr.c_str();

cstring mfcfrmstd = stdstr.c_str();

在轉換時一定要保持字符集的一致,否則報錯不能轉換,上面**中,除了string型別不能自動轉換字符集,其它都會隨專案字符集設定自動轉換。上面**適用於多位元組專案,要適用於寬字元專案僅需將string換成wstring。

附:

一些型別、巨集或函式命名中的特定字母意義

l:long

p:point

c:const

t:translate

a:ansi

w:wide

結束:

這個寫得很真實很詳細,然而我總覺得它不太實用……更適合深入了解。

水平有限,歡迎拍磚,共同進步

初學者的煩惱 字串右移

時間限制 1000 ms 記憶體限制 65535 kb 難度 1 描述 小c才開始學習c語言,讓他最煩惱的就是對字元陣列的操作。小c的好朋友小e為了激勵他,出了這樣乙個題目 字串的移動輸出。並給他許諾說,如果他能夠在有限的時間內編寫出這道題目的 並順利通過就請他去吃大餐,於是小c便認真的敲這個題目的...

C語言 c語言練習題 字串訓練 (適合初學者)

c語言 c語言練習題 c語言 c語言練習題 c語言 c語言練習題 c語言 c語言練習題 c語言 c語言練習題 整數演算法訓練 c語言 c語言練習題 遞迴和棧程式設計訓練 c語言 c語言練習題 字串訓練 c語言 c語言練習題 指標和鍊錶訓練 目錄 1.題目 請編寫乙個c函式,該函式將乙個字串逆序 2....

求兩個字串的最長公共子串(初學者適用)

即兩個字串中相等且連續的子串。例如 串 abcde 和串 gabfcde 中公共子串有ab 和 cde 兩個。即在上述 公共子串 的定義中加上最長二字,上面例子中 cde 便是最長公共子串。大致思路 假設有串str1和串str2。挨個找出str1和str2中所有的公共子串,在尋找過程中只記錄下長度最...