||
在這里我們會(huì)發(fā)現(xiàn)sizeof對于string不起作用,總是返回大小12,這我無法解釋,只能把它理解成因?yàn)閟tring是一個(gè)動(dòng)態(tài)不定長的字符串?dāng)?shù)組,sizeof返回的實(shí)際上是一個(gè)數(shù)組結(jié)構(gòu)的字節(jié)大小。如果用64位編譯,你會(huì)發(fā)現(xiàn)sizeof總是返回24。
(2)wstr(string)賦值給一個(gè)string類型的變量,不會(huì)發(fā)現(xiàn)任何變化。
(3) sizeof(wstr())總是返回0,估計(jì)是一個(gè)Null值。
所以在實(shí)際使用中如果要預(yù)先分配內(nèi)存的話,千萬要小心不要誤以為sizeof(string)能返回總字節(jié)大小。
'冬瓜湯整理編寫
二、使用afx的字符串函數(shù)
#include once "afx/CWSTR.inc"
#include once "afx/afxStr.inc"
using afx '所有的afx庫,都處在同一個(gè)命名空間afx里,F(xiàn)B的命名空間規(guī)則和c#/vb.net是一樣的。
'我不喜歡using這個(gè)關(guān)鍵詞,我更喜歡Imports,但沒辦法 import在FB很早以前就是一個(gè)關(guān)鍵字了。
'判斷是否是數(shù)字
Dim inNumeric As boolean=afxIsNumeric("-1395.43")
'同left的用法
Dim As cwstr strLeft=afxstrClipLeft("這是一個(gè)Freebasic測試",9)
'同mid的用法
Dim As cwstr strMid=afxstrClipMid("這是一個(gè)Freebasic測試",4,5)
'同Right用法
Dim As cwstr strRight=afxstrClipRight("這是一個(gè)Freebasic測試",2)
'左右嵌入空格或指定的符號
Dim As cwstr strCset=afxstrCset("單身狗",11,"*") '返回 ****單身狗****
'刪除指定數(shù)量的子字符串
Dim As cwstr strDelete=afxstrDelete("這是一個(gè)Freebasic測試",4,9)
'從主字符串提取匹配指定字符的字符串,但不包括指定字符本身
Dim As cwstr strExtract=afxstrExtract(1,"誰是單身狗,不是單身貓","狗") '
Dim As cwstr strExtractAny=afxstrExtractAny(1,"誰是單身狗,不是單身貓","貓狗")
'從指定位置插入子字符串
Dim As cwstr strInsert=afxstrInsert("01032547891","—",3) '從第三個(gè)位置之后插入子字符串
'同join用法
Dim cwsa As cwstrArray=cwstrArray(4,1) '建一個(gè)4行1列的數(shù)組
cwsa.Item(1) = "One"
cwsa.Item(2) = "Two"
cwsa.Item(3) = "Three"
cwsa.item(4)="Four"
DIM strJoinAS CWSTR = AfxStrJoin(cwsa, ",") '用法和vb的join一樣
'左邊加入指定數(shù)量的空格或指定符號
DIM strLset AS CWSTR = AfxStrLSet("FreeBasic", 20, "#")
'解析帶分隔符的字符串,分隔符可以多種混用
DIM cws AS CWSTR = AfxStrParse("one,two,three", 2) ' Returns "two"
DIM cws AS CWSTR = AfxStrParseAny("1;2,3", 2, ",;") ' Returns "2"
'解析帶分隔符的字符串,并返回?cái)?shù)量
DIM nCount AS LONG = AfxStrParseCount("one,two,three", ",") ' Returns 3
DIM nCount AS LONG = AfxStrParseCountAny("1;2,3", ",;") ' Returns 3
'返回子字符串第一次出現(xiàn)在主字符串位置之前的那部分字符串,可以指定搜索位置從哪里開始,默認(rèn)從1
DIM cws AS CWSTR = AfxStrRemain("Brevity is the soul of wit", "is ") ' Returns "the soul of wit"
DIM cws AS CWSTR = AfxStrRemainAny("I think, therefore I am", ",") ' Returns "therefore I am"
'從主字符串移除子符串
DIM cws AS CWSTR = AfxStrRemove("[]Hello[]", "[]") ' Returns "Hello"
DIM cws AS CWSTR = AfxStrRemoveAny("abacadabra", "bac") ' Returns "dr"
'替換,同Replace()
DIM cws AS CWSTR = AfxStrReplace("Hello World", "World", "Earth") ' Returns "Hello Earth"
DIM cws AS CWSTR = AfxStrReplaceAny("abacadabra", "bac", "*") ' Returns "*****d**r*
'去掉主字符串不匹配指定的子符串的那部分,只返回匹配的子符串或子符串組
DIM cws AS CWSTR = AfxStrRetain("abacadabra","b") ' Returns "bb"
DIM cws AS CWSTR = AfxStrRetainAny("1234567890<ak;lk;l>1234567890", "<;/p>") ' Returns "<;;>"
'反轉(zhuǎn)字符串
DIM cws AS CWSTR = AfxStrReverse("garden") ' Returns "nedrag"
'右邊添加指定數(shù)量的空格或指定符號
DIM cws AS CWSTR = AfxStrRSet("FreeBasic", 20, "*")
'將帶各種不規(guī)范分隔符的字符串,整理成一種規(guī)范的字符串
DIM cws AS CWSTR = AfxStrShrink(",,, one , two three, four,", " ,")' Returns "one two three four"
'同split
DIM cws AS CWSTR = "- This, a sample string."
DIM cwsa AS CWstrArray = AfxStrSplit(cws, " ,.-")
FOR i AS LONG = cwsa.LBound TO cwsa.UBound
PRINT cwsa.Item(i)
NEXT
'統(tǒng)計(jì)子符串在主子符串出現(xiàn)的次數(shù)
DIM nCount AS LONG = AfxStrTally("abacadabra", "ab") ' Returns 2
DIM nCount AS LONG = AfxStrTallyAny("abacadabra", "bac") ' Returns 8
'在開頭和結(jié)尾,刪除成對的字符符號
AfxStrUnWrap("<Paul>", "<", ">") results Paul
AfxStrUnWrap("'Paul'", "'") results Paul
'確定主字符串是否包含指定子符串中任一一個(gè)字符
DIM nCount AS LONG = AfxStrVerify(5, "123.65,22.5", "0123456789") ' Returns 7
'在字符串開頭和結(jié)尾添加 成對的字符
AfxStrWrap('保羅',"<", ">")結(jié)果<保羅>
……還有一些函數(shù),具體看幫助文檔
###########################################################
三、使用BSTR
為了方便使用,我將Cbstr類和Cwstr類合并在同一個(gè)文件cwstr.inc中
#include once "afx/Cwstr.inc"
using afx
Dim myBstr as CBSTR
myBstr="這是一個(gè)測試"
用 Cbstr類,主要是為了能夠自動(dòng)釋放vbstring指針。忘記釋放bstr指針,是非常容易犯的錯(cuò)。所以一遇到任何傳進(jìn)來的bstr字符串
就立即用cbstr進(jìn)行接收。
|站長郵箱|小黑屋|手機(jī)版|Office中國/Access中國
( 粵ICP備10043721號-1 )
GMT+8, 2025-7-13 03:06 , Processed in 0.078168 second(s), 17 queries .
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.