如何知道字符中有数字
解决方案 »
- 请教一个关于dbf的问题
- 好像是个初级问题,怎样才能不让调节窗口大小
- 谁能帮我推荐一本vb数据库编程的书啊
- 大家知道哪有那种图形操作方面的源码或例子呀,100分奉上求之。
- MSDN的下载地址??
- 如何让对话框中 只能输入二进制数1,0,并且不能超过16位,一小时 揭帖,求助............
- 诚信20 分一个地址 Microsoft DHTML Editing Component SDK
- 关于记录个数?
- 关于VB的一个插件Messenger API Type Library
- 如何设置系统托盘,按窗体最小化按钮时缩小到任务栏(托盘图标保留),按关闭按钮时缩小到托盘?
- 关于键盘HOOK的问题
- 关于fpSpread控件!!!
a = "dddfg2eeqq"
c = a Like "*[0-9]*"
Debug.Print a, c
if instr(STR,i) then msgbox "有数字!":exit for
next
Dim bolHaveNum As Boolean
Dim intP As Integer
Dim strP As String
strP = "adjflksd123dfjlsd"
bolHaveNum = False
For intP = 0 To 9
If InStr(1, strP, CStr(intP), vbTextCompare) <> 0 Then
bolHaveNum = True
Exit For
End If
Next intP
If bolHaveNum = True Then
Debug.Print "含有数字"
End If
End Sub
那么,字符串转为Byte数组之后,每个字节的值在0-255之间。
假如某个Byte值在48-57之间,就表示有数字。
数组tCd()有256个元素,从0-255,表示Byte值0-255每个值是否“有效”。
为了达到测试数字的目的,定义它的48-57范围的元素为“有效”。
字符串的Byte数组是tBt(),tCd(tBt(i))就表示tBt()的第i个字节是否“有效”(为数字)
从tCd(tBt(0))开始循环,查找tCd(tBt(i))是否为“真”。假如遇到任何一个为“真”,立即结束循环。这种方法的好处是特别灵活,而且迅速。只要是这种查表可以解决的情况,你可以定义任意的编码范围。比如:是否带数字和小写字母;是否带数字和ABCDEF的16进制字母;是否有汉字存在……等等。这些用途的区别无非就是tCd()定义不同。
Function NumInStr(ByRef pStr As String) As Boolean
Dim tOutBool As Boolean
Dim tBt() As Byte
Dim tCd() As Boolean
Dim tBe As Long
Dim tI As Long
tBt() = pStr
ReDim tCd(255)
For tI = 48 To 57
tCd(tI) = True
Next
tBe = UBound(tBt())
For tI = 0 To tBe
tOutBool = tCd(tBt(tI))
If tOutBool Then Exit For
Next
NumInStr = tOutBool
End Function
我的程序里,表和逻辑运算符比较多一些。查表的目的不同。有时候是为了加速(比如极坐标转换),有时候是为了简化问题(比如需要很长的Select Case或If Then来解决的问题)。有些程序,比如我上面提供那个。假如表是存在于ini之类外部文件的,稍微把表改改就是另外一个用途。
查表还算正常点的,最气人的是这种代码:老师:请同学们写一个判断X为奇数、偶数的程序。
仙妹:Debug.print Chr((CBool(X Mod 2) And 298) - 14916) & "数"
“包搞定”太形象了! 小仙妹在 15F 写的代码确实新潮~~~~~~~~
学习了........
不过,我觉得把 X Mod 2 改成 X And 1 更好。
仙妹:Debug.print Chr((CBool(X Mod 2) And 298) - 14916) & "数" 饿滴神~~~~~~~~
"dddfg2eeqq" Like "*#*"
? Any single character.
* Zero or more characters.
# Any single digit (0–9).
[charlist] Any single character in charlist.
[!charlist] Any single character not in charlist. 所以:Debug.print "dddfg2eeqq" Like "*#*" 貌似就可以了