VC中關於字串處理問題小結

2021-05-22 20:10:20 字數 2734 閱讀 8495

在visual c++中,對字串的處理是程式設計中經常遇到的問題。筆者在實際的工作中就經常性地碰到這類問題,且常常遊走於cstring、char及其相互之間轉換的情形當中,因筆者在c++方面也是剛剛起步,對字串的處理還真給筆者出了不少難題。不過,借助msdn及相關網路資源,筆者對字串的處理漸漸熟悉起來。現在此對vc中字串的處理做乙個階段小結。

我們都知道,在c++中處理字串可以使用cstring,可以使用string,也可以使用char*。cstring是visual c++中最常用的字串類,string為標準模板類(stl)定義的字串類,而char*則是c語言程式設計中最常用的字串指標。在這裡筆者僅僅簡要總結一下cstring和char*的基本使用,因當下較少使用string,故不再詳述。

首先來看cstring,筆者對其最經常性的乙個用途就是格式化,比如將int、long、double等型別的資料轉換為字串型別,還有在輸出除錯資訊時亦經常用到,如下面的**所示:

// output the debug message cstring szdebugmsg; szdebugmsg.format(text("uiseeksizepos: %i64u, uistartsizepos: %i64u, uiendsizepos: %i64u"), uiseeksizepos, uistartsizepos, uiendsizepos); ::outputdebugstring(szdebugmsg);

其次就是char*指標了,通常我們需要將多個char*拼接起來,這可以有多種方法,比如使用strcpy、strncpy可以通過複製的方式將多個字串進行拼裝,或使用strcat來連線多個字串。而若是需要按特定的格式拼裝成乙個新的字串,則可以使用sprintf函式,**示例如下:

此外,對於字串常需要在字串末尾加上「/0」,這時可以採用手動加入或呼叫c_str()。

在這裡還需要提及的就是cstring與char*指標之間的轉換了。從char*指標轉換為cstring是非常簡單的,只需直接等於其即可,如:

char* pchtest = "hello, world!"; cstring sztest; sztest = pchtest;

而從cstring轉換為char*指標的話,則可以使用format,或進行強制轉換const char* pchtest = (lpctstr)sztest,或使用getbuffer(int nminbuflength)方法。需要注意的是寬字元的轉換問題,**示例如下:

cstring szmainbuffer; // get buffer size char* pszbuffer = null; int ibytesize = 0, iwcharsize = 0, ilastchar = 0; iwcharsize = _tcslen(szmainbuffer); ibytesize = widechartomultibyte( cp_acp, // uint codepage, null, // dword dwflags, szmainbuffer, // lpcwstr lpwidecharstr, iwcharsize, // int cchwidechar, null, // lpstr lpmultibytestr, 0, // int cbmultibyte, null, // lpcstr lpdefaultchar, null // lpbool lpuseddefaultchar ); // allocate buffer pszbuffer = new char[ ibytesize + 1 ]; ilastchar = ibytesize; memset( pszbuffer, '/0', ibytesize + 1 ); // convert widechartomultibyte( cp_acp, // uint codepage, null, // dword dwflags, szmainbuffer, // lpcwstr lpwidecharstr, iwcharsize, // int cchwidechar, pszbuffer, // lpstr lpmultibytestr, ibytesize, // int cbmultibyte, null, // lpcstr lpdefaultchar, null // lpbool lpuseddefaultchar ); // force null-terminate pszbuffer[ilastchar] = '/0';

總之,對於vc中,無論是字串之間的轉換,還是字串與其他資料型別之間的轉換,均有非常多的系統函式或api可供使用,非常方便。

Windows中的寬字串處理問題

在用vc做開發的時候,對於一些字串,會經常呼叫一般 t t t 其實這些東西都和unicode有關係。比如說,afxmessagebox t error fail to connect the database 這裡用到了乙個 t 不使用 t 有時候編譯會報錯。windows作業系統使用unicod...

有關字串處理問題的原則

a 字串的資料結構 如字尾陣列 a1.雜湊。非常快的資料結構,而且較容易實現 a2.平衡樹。這個結構即使是在輸入不正當的情況下也有非常好的效能,並且已經優雅地打包到了c 標準模板庫set和map的大多數實現中。a3.字尾陣列。初始化指向文字串中的每個字元的指標陣列,將其排序,這樣就得到了乙個字尾陣列...

轉貼 VC中Unicode字串的處理

unicode 寬位元組字符集 1.如何取得乙個既包含單位元組字元又包含雙位元組字元的字串的字元個數?可以呼叫microsoft visual c 的執行期庫包含函式 mbslen來操作多位元組 既包括單位元組也包括雙位元組 字串。呼叫strlen函式,無法真正了解字串中究竟有多少字元,它只能告訴你...