求助关于abab,aabb算法问题

aguangkj 2009-06-21 10:12:15
目的:从80或100个手机号码中挑选出像“3344”“4747”“777”这样的号码。
abab,aabb,aaa。

到底是把11位手机号定义成字符串比较简单?还是把11位数定义成数组比较简单呢?

希望各位大大给写个完整的挑选函数出来参看一下。

先谢谢了^_^
...全文
293 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
goosen 2009-06-21
  • 打赏
  • 举报
回复
'测文件
'13751884586
'13922541252
'13844332952
'13511125482
'13152541212
'13545121234
'13525443325

Private Sub Command1_Click()
'4433 111 1212
Call Find(4433, 111, 1212)
End Sub

Private Sub Find(abab As Integer, aabb As Integer, aaa As Integer)
Dim arr() As String, sFile As String, i As Long
Dim Result As String

Open "c:\1.txt" For Binary As #1 '你的手机号文件
sFile = Space(LOF(1))
Get #1, , sFile
Close #1

arr = Split(sFile, vbCrLf)
For i = 0 To UBound(arr) - 1 '如果txt文件最后一行没有空格时去掉-1
If InStr(arr(i), abab) > 0 Or InStr(arr(i), aabb) > 0 Or InStr(arr(i), aaa) Then
Result = Result & arr(i) & vbCrLf
End If
Next i
'Debug.Print Result
MsgBox Result
End Sub
goosen 2009-06-21
  • 打赏
  • 举报
回复
你不一个个比较那知道它 是否相同
aguangkj 2009-06-21
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 goosen 的回复:]
3344 4747 777

是一个手机号的后面几位数 还是只要 在此11个数字中出现就行
[/Quote]
在此11个数字中出现就行

我想总不能用最笨的方法一个一个比较吧,
那样需要列举出所有0011到0099等等……个例子。

刚开始感觉这个题很好解答,但仔细一想就蒙了。
望高手解答!
goosen 2009-06-21
  • 打赏
  • 举报
回复
3344 4747 777

是一个手机号的后面几位数 还是只要 在此11个数字中出现就行
aguangkj 2009-06-21
  • 打赏
  • 举报
回复
六楼的SYSSZ老大写的代码好正典啊!
给个花O(∩_∩)O哈哈~

学习一下循环和字符串截取,

好好学习天天向上
SYSSZ 2009-06-21
  • 打赏
  • 举报
回复

Public Function iStr(ByVal s As String)
Dim i As Integer
Dim a1, a2, a3, a4, s1 As Integer
For i = 1 To Len(s) - 2
s1 = Mid(s, i, 3)
a1 = Mid(s1, 1, 1)
a2 = Mid(s1, 2, 1)
a3 = Mid(s1, 3, 1)
If a1 = a2 And a3 = a2 Then
Debug.Print s1
End If
Next
For i = 1 To Len(s) - 3
s1 = Mid(s, i, 4)
a1 = Mid(s1, 1, 1)
a2 = Mid(s1, 2, 1)
a3 = Mid(s1, 3, 1)
a4 = Mid(s1, 4, 1)
If a1 = a2 And a3 = a4 Then
Debug.Print s1
End If
Next
For i = 1 To Len(s) - 3
s1 = Mid(s, i, 4)
a1 = Mid(s1, 1, 2)
a2 = Mid(s1, 3, 2)
If a1 = a2 Then
Debug.Print s1
End If
Next
End Function

Private Sub Form_Load()
iStr "13134433555"

End Sub
aguangkj 2009-06-21
  • 打赏
  • 举报
回复
先谢谢4楼的代码,写的不错,但
如果用这个函数挑选所有符合abab的号码,
岂不是参数要带上一大筐如下:
Call Find(0011, 0022, 0033-->0099,0101,0202-->0909,2121,2323-->2929…………………………………………………………………………)
那样代码也太长了吧。

我的思路:
写个函数,
把11位数字先存到一个数组里面,
然后先4位数字比较,如果有3位相同调出来,
然后挑前两位相同和后两位相同的,
然后挑隔1位相同的,

如果符合上面的一个筛选条件函数返回真

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧