AnsiString類是BCB中最常見類之一,了解它對以後深入學習BCB大有幫助原來關於這個類的提出的問題有很多,現總結如下。加上我個人的經驗,湊出了一篇關於這個類的最常用方法屬性的介紹,希望能對各位有所幫助
常用方法:
1. char* c_str()
返回一個字符串指針,他指向的內容和AnsiString中包含的字符串的內容一致(BCB幫助中就是是這樣解釋這個方法的,關於它更詳細的討論見後文)
Example:
AnsiString str = "Hello World!";
MessageBox(NULL,str.c_str(),"",MB_OK); //顯示一個消息框
2.AnsiCompare(AnsiString& rhs)
operator == (AnsiString& rhs)
都用來比較兩個AnsiString的內容是否相同,兩者的區別在於當內容相等的時候前者返回0,而後者返回true
3.int Length()
很簡單,返回字符串長度
4.char & operator [](const int idx)
返回字符串中第idx個字符
注意:這個地方不知道BCB怎麼想的,可能是為了照顧Delphi程序員的習慣吧卻給C程序員造成了一點小小的麻煩:和C中數組的用法不兼容,也就是說當idx為0的時候,BCB會拋出一個異常,而不是返回第一個字符!要得到第一個字符,idx應該為1
Example:
AnsiString str = "Hello World!";
char byte = str[2];
//byte等於'e' 而 不等於'l'
ps.下面的介紹,只要是關於第X個字符的,都和這裡一樣,不再重複
5.AnsiString SubString(int index, int count)
返回從第index個字符開始,長度為count子串
Example:
AnsiString str = "Hello World!";
MessageBox(NULL,str.SubString(7,5).c_str(),"",MB_OK); //顯示內容為 World
6.int pos(AnsiString& subStr)
查找內容為subStr的字串,如果有,返回字串的第一個字符位置 如果沒有,返回0
7.int ToInt()
int ToIntDef(int defaultValue)
返回當前字符串轉化為整數的結果,不同點在於,當不能轉化時,前者拋出一個異常,而後者返回defaultValue,嘿嘿,偶喜歡後者
8.AnsiString LowerCase()
AnsiString UpperCase()
返回當前字符串轉化為小寫/大寫的結果
注意,它們只是返回一個新的AnsiString,原來字符串的內容沒有變化
9.AnsiString& sprintf(char *, ...)
利用sprintf強大功能格式化當前字符串,詳細用法請參考sprintf或者printf
其它一些操作符:+ += >= > < <= !=
這些不用解釋了吧……
深入探討:
1.關於c_str()的返回值問題.
能否用這個返回值訪問/修改字符串中的內容?
Example:
AnsiString a = "I want to modify this using pointer";
char *p = a.c_str();
p[0] = 'i';
........ //指針操作
ShowMessage(a);
雖然BCB的幫助表明 c_str()這個函數的返回值(char*)只在它所在表達式內有效,
但是以上代碼有時候卻可以完成預期的目的
個人極力反對用這種方法來改變字符串的內容,因為AnsiString自帶的方法已經能夠十
分有效的完成指針操作
比如上面的例子中 p[0] 可以用 a[1] 來代替
合併字符串可以用 + 或者 += 來替代
還有查找,插入,刪除等,都可以在幫助中找到AnsiString類中對應的方法來實現
2.Unicode的支持
由於AnsiString非模板類
除了WideChar方法外,AnsiString好像不支持Unicode
但是不知道為什麼裡面會有ByteType這個方法
3.很有意思的方法
Unique()
LastDelimiter()
不常用,但是我覺得是十分有意思的函數
怎麼用,可以參考幫助
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?postId=32937
留言列表