求VB开发思路,希望各自发表见解,谢谢
下面有一面段文字让程序检测这段文字中哪些是单字,哪些是词语。并依次输出
另外移动资费越下降,你上网的流量越大。2018年2月份我们每个用户的上网流量是多少?2.6个G,是2017年的同期的150%,2018年2月份的流量是2017年2月份流量的1.5倍,翻上去了,所以你越用得容易,你的流量越高,你的资费就越高。当然总理还是希望进一步的提速降费
程序依次输出:
另外
移动
资费
越
下降
,
你
上网
的
.....
另外移动资费越下降,你上网的流量越大。2018年2月份我们每个用户的上网流量是多少?2.6个G,是2017年的同期的150%,2018年2月份的流量是2017年2月份流量的1.5倍,翻上去了,所以你越用得容易,你的流量越高,你的资费就越高。当然总理还是希望进一步的提速降费
2021-08-25 19:39

2021-08-25 21:13
程序代码:Option Explicit
Const 词表文件 = "d:\词表.txt"
Private Type 词结构
Count As Long '该长度的词的个数
strT() As String '词
End Type
Dim cb() As 词结构 '词表数组
Dim CbCount As Long '词表有几个数组
Private Sub Command1_Click()
Call 读词表(词表文件)
Dim s As String, s1 As String
Dim i As Long, o As Long, L As Long
Dim FYN As Boolean
s1 = Text1.text
Text2.text = ""
L = Len(s1)
Do
'查找数字
s = Left(s1, 1)
If Asc(s) > 0 Then '非汉字
For i = 2 To L
s = Mid(s1, i, 1)
If Asc(s) < 0 Then Exit For
Next i
s = Left(s1, i - 1)
s1 = Mid(s1, i) '保留剩余部分,如果s用掉了全部,会变成只保留到空
Text2.text = Text2.text & vbCrLf & s
L = Len(s1)
End If
'-------找词--------
For i = CbCount To 2 Step -1 '从最大的词表比较起
If cb(i).Count > 0 And L >= i Then '加一个限制长度,减少运算量
s = Left(s1, i)
FYN = False
For o = 1 To cb(i).Count
If s = cb(i).strT(o) Then '查找
FYN = True '设置找到
Exit For '因为有二层循环,所以不能直接处理,一层一层的跳
End If
Next o
If FYN Then '找到
s1 = Mid(s1, i + 1)
Text2.text = Text2.text & vbCrLf & s
s = "" '置空,用于判断是否是单字
Exit For
End If
End If
Next i
If Len(s) > 0 Then '未查找到,单字
s = Left(s1, 1)
s1 = Mid(s1, 2)
Text2.text = Text2.text & vbCrLf & s
End If
L = Len(s1)
Loop While L > 0
End Sub
Private Sub Form_Load()
Text1.text = "另外移动资费越下降,你上网的流量越大。2018年2月份我们每个用户的上网流量是多少?2.6个G,是2017年的同期的150%,2018年2月份的流量是2017年2月份流量的1.5倍,翻上去了,所以你越用得容易,你的流量越高,你的资费就越高。当然总理还是希望进一步的提速降费"
End Sub
Private Sub 读词表(filename As String)
CbCount = 0
Dim s As String
Dim f() As String
Dim i As Long, o As Long
s = 打开文件(filename)
f = Split(s, vbCrLf) '分解成每一行
For i = 0 To UBound(f)
o = Len(f(i)) '取长度
If o > 1 Then '长度小于2的统统忽略,这种为空行或单字
If CbCount < o Then '如果没这个长度
CbCount = o '设置这个长度
ReDim Preserve cb(CbCount) '重定义数组
With cb(CbCount) '初始化,防止出错
.Count = 0
ReDim .strT(.Count)
End With
End If
With cb(o) '
.Count = .Count + 1 '元素+1
ReDim Preserve .strT(.Count) '重定义数组
.strT(.Count) = f(i) '保存
End With
End If
Next i
End Sub
Public Function 打开文件(cs As String) As String
'快速打开文件
Dim fj As Long
If Dir(cs) <> "" Then '文件存在
fj = FreeFile() '产生下一文件号
Open cs For Binary As #fj '打开文件
'直接读整个文件的所有的内容,按字节读,并转换为 Unicode 的VB默认字符串类型
打开文件 = StrConv(InputB$(LOF(fj), #fj), vbUnicode)
Close #fj
Else
MsgBox cs & vbCrLf & "文件不存在!", vbCritical, "打开文件" '提示文件不存在
End If
End Function

2021-08-25 23:10
2021-08-28 19:50
2021-09-06 19:56