||
在这里我们会发现sizeof对于string不起作用,总是返回大小12,这我无法解释,只能把它理解成因为string是一个动态不定长的字符串数组,sizeof返回的实际上是一个数组结构的字节大小。如果用64位编译,你会发现sizeof总是返回24。
(2)wstr(string)赋值给一个string类型的变量,不会发现任何变化。
(3) sizeof(wstr())总是返回0,估计是一个Null值。
所以在实际使用中如果要预先分配内存的话,千万要小心不要误以为sizeof(string)能返回总字节大小。
'冬瓜汤整理编写
二、使用afx的字符串函数
#include once "afx/CWSTR.inc"
#include once "afx/afxStr.inc"
using afx '所有的afx库,都处在同一个命名空间afx里,FB的命名空间规则和c#/vb.net是一样的。
'我不喜欢using这个关键词,我更喜欢Imports,但没办法 import在FB很早以前就是一个关键字了。
'判断是否是数字
Dim inNumeric As boolean=afxIsNumeric("-1395.43")
'同left的用法
Dim As cwstr strLeft=afxstrClipLeft("这是一个Freebasic测试",9)
'同mid的用法
Dim As cwstr strMid=afxstrClipMid("这是一个Freebasic测试",4,5)
'同Right用法
Dim As cwstr strRight=afxstrClipRight("这是一个Freebasic测试",2)
'左右嵌入空格或指定的符号
Dim As cwstr strCset=afxstrCset("单身狗",11,"*") '返回 ****单身狗****
'删除指定数量的子字符串
Dim As cwstr strDelete=afxstrDelete("这是一个Freebasic测试",4,9)
'从主字符串提取匹配指定字符的字符串,但不包括指定字符本身
Dim As cwstr strExtract=afxstrExtract(1,"谁是单身狗,不是单身猫","狗") '
Dim As cwstr strExtractAny=afxstrExtractAny(1,"谁是单身狗,不是单身猫","猫狗")
'从指定位置插入子字符串
Dim As cwstr strInsert=afxstrInsert("01032547891","—",3) '从第三个位置之后插入子字符串
'同join用法
Dim cwsa As cwstrArray=cwstrArray(4,1) '建一个4行1列的数组
cwsa.Item(1) = "One"
cwsa.Item(2) = "Two"
cwsa.Item(3) = "Three"
cwsa.item(4)="Four"
DIM strJoinAS CWSTR = AfxStrJoin(cwsa, ",") '用法和vb的join一样
'左边加入指定数量的空格或指定符号
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"
'解析带分隔符的字符串,并返回数量
DIM nCount AS LONG = AfxStrParseCount("one,two,three", ",") ' Returns 3
DIM nCount AS LONG = AfxStrParseCountAny("1;2,3", ",;") ' Returns 3
'返回子字符串第一次出现在主字符串位置之前的那部分字符串,可以指定搜索位置从哪里开始,默认从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 "<;;>"
'反转字符串
DIM cws AS CWSTR = AfxStrReverse("garden") ' Returns "nedrag"
'右边添加指定数量的空格或指定符号
DIM cws AS CWSTR = AfxStrRSet("FreeBasic", 20, "*")
'将带各种不规范分隔符的字符串,整理成一种规范的字符串
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
'统计子符串在主子符串出现的次数
DIM nCount AS LONG = AfxStrTally("abacadabra", "ab") ' Returns 2
DIM nCount AS LONG = AfxStrTallyAny("abacadabra", "bac") ' Returns 8
'在开头和结尾,删除成对的字符符号
AfxStrUnWrap("<Paul>", "<", ">") results Paul
AfxStrUnWrap("'Paul'", "'") results Paul
'确定主字符串是否包含指定子符串中任一一个字符
DIM nCount AS LONG = AfxStrVerify(5, "123.65,22.5", "0123456789") ' Returns 7
'在字符串开头和结尾添加 成对的字符
AfxStrWrap('保罗',"<", ">")结果<保罗>
……还有一些函数,具体看帮助文档
###########################################################
三、使用BSTR
为了方便使用,我将Cbstr类和Cwstr类合并在同一个文件cwstr.inc中
#include once "afx/Cwstr.inc"
using afx
Dim myBstr as CBSTR
myBstr="这是一个测试"
用 Cbstr类,主要是为了能够自动释放vbstring指针。忘记释放bstr指针,是非常容易犯的错。所以一遇到任何传进来的bstr字符串
就立即用cbstr进行接收。
|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )
GMT+8, 2024-11-25 07:31 , Processed in 0.055757 second(s), 17 queries .
Powered by Discuz! X3.3
© 2001-2017 Comsenz Inc.