用vb写了个译码的小程序,总是溢出,能帮忙看下哪里错了吗?
发表在VB答疑区
2013-06-27
是否精华
是
否
版块置顶:
是
否
设计入下:
译码器可以将“原文”文本框对应的三位一组的数字代码译成“译文”文本框中的文字。具体设计要求如下:
译码规则:
① 将“原文”文本框(txtori)中的数字串中左边的空格取掉。
② 三位一组取数字,如果三位数是在0 ~ 255之间,即ASCII值的范围,则将其转换为相应的字符,否则保持原状。
③ 如果字符为字母则字符译为:此字母按26个字母排列顺序向后移动当前的日期中“日”个位置(如今天是2013.6.15,则向后移15个位置),倘若位置移出最后一个字母,则移到第一个字母a或A的位置并顺次往后移。如字母z向后移15个到o。
④ 如果字符非字母,则将其转换为数字。若为0则译为空格,其他保持不变。
⑤输入字符串以“###”结束,字符串中数字必须三位一组。
(3)具备统计译文信息功能。统计译文单词个数、大写字母及小写字母个数、其他字符个数。
(4)命令按钮。单击“译码”按钮完成译码和统计。单击“清除”按钮清除“原文”文本框(txtori)和“译文”文本框(txttra)中的内容。
遇到的问题:
例如原文输入097,点击译码按钮即cmdtra时会出现 ‘实时错误6’溢出
如果原文输入097###则不会出错
译码按钮主要程序代码如下:
Private Sub cmdtra_Click()
Dim ori As String, tra As String, orip As String, trap As String
Dim trapn As Integer, n As Integer, lettercap As Integer, letterlow As Integer, word As Integer, other As Integer
n = 1
If n >= 1 And n <= 99999 Then
ori = LTrim$(txtori.Text) '取掉“原文”文本框字符串右边的空格,赋值给变量ori
orip = Mid$(ori, n, 3) '从字符串ori的第一个位置开始取3个字符,赋值给字符串变量orip
While orip <> "###" '遇到###便结束
n = n + 3 '每三个字符为一组,确定下一次取字符的位置
If Val(orip) >= 0 And Val(orip) <= 255 Then 'ASCII码的范围是0~255
orip = Chr$(Val(orip)) '将数字字符串orip转换为数字val(orip),求出以此数字为ASCII码值对应的字符,再次赋给变量orip
If orip >= "a" And orip <= "z" Then 'orip是小写字母
trapn = Asc(orip) - 97 '求出orip在26个小写字母中的位置,a~z的位置为97~122
trap = Chr$((trapn + Day(Now)) Mod 26 + 97) '求出按规则转换后的字符
letterlow = letterlow + 1 '计小写字母的个数
Else
If orip >= "A" And orip <= "Z" Then '大写字母
trapn = Asc(orip) - 65 '求出orip在26个大写字母中的位置,A~Z的位置为65~90
trap = Chr$((trapn + Day(Now)) Mod 26 + 65) '求出按规则转换后的字符
lettercap = lettercap + 1 '计大写字母的个数
Else '非字母
trap = Asc(orip) '字符orip转换成ASCII码值,作为译码即保持原值
If trap = 0 Then '字符oripASCII码值为0即原值为000
trap = " " '译码为空格
word = word + 1 '单词计数,因为空格分隔单词
other = other + 1 '其他字符计数,空格也是一个非字母字符
Else
If trap > 99 Then '其他字符计数
other = other + 3
Else
If trap > 9 Then
other = other + 2
Else
other = other + 1
End If
End If
End If
End If
End If
Else
trap = orip '超出ASCII码范围的值不变
End If
tra = tra + trap '译码连接到字符串tra
orip = Mid$(ori, n, 3) '取出下一个字符串
Wend
txttra.Text = tra '译文在“译文”文本框中显示
inf = "大写字母个数:" + Str$(lettercap) + Chr$(13) + Chr$(10) + "小写字母个数:" + Str$(letterlow) + Chr$(13) + Chr$(10) + "单词个数:" + Str$(word + 1) + Chr$(13) + Chr$(10) + "其他字符个数:" + Str$(other)
MsgBox inf, 0 + 64, "译文统计信息" '信息框中显示统计数据
End If
End Sub
译码器可以将“原文”文本框对应的三位一组的数字代码译成“译文”文本框中的文字。具体设计要求如下:
译码规则:
① 将“原文”文本框(txtori)中的数字串中左边的空格取掉。
② 三位一组取数字,如果三位数是在0 ~ 255之间,即ASCII值的范围,则将其转换为相应的字符,否则保持原状。
③ 如果字符为字母则字符译为:此字母按26个字母排列顺序向后移动当前的日期中“日”个位置(如今天是2013.6.15,则向后移15个位置),倘若位置移出最后一个字母,则移到第一个字母a或A的位置并顺次往后移。如字母z向后移15个到o。
④ 如果字符非字母,则将其转换为数字。若为0则译为空格,其他保持不变。
⑤输入字符串以“###”结束,字符串中数字必须三位一组。
(3)具备统计译文信息功能。统计译文单词个数、大写字母及小写字母个数、其他字符个数。
(4)命令按钮。单击“译码”按钮完成译码和统计。单击“清除”按钮清除“原文”文本框(txtori)和“译文”文本框(txttra)中的内容。
遇到的问题:
例如原文输入097,点击译码按钮即cmdtra时会出现 ‘实时错误6’溢出
如果原文输入097###则不会出错
译码按钮主要程序代码如下:
Private Sub cmdtra_Click()
Dim ori As String, tra As String, orip As String, trap As String
Dim trapn As Integer, n As Integer, lettercap As Integer, letterlow As Integer, word As Integer, other As Integer
n = 1
If n >= 1 And n <= 99999 Then
ori = LTrim$(txtori.Text) '取掉“原文”文本框字符串右边的空格,赋值给变量ori
orip = Mid$(ori, n, 3) '从字符串ori的第一个位置开始取3个字符,赋值给字符串变量orip
While orip <> "###" '遇到###便结束
n = n + 3 '每三个字符为一组,确定下一次取字符的位置
If Val(orip) >= 0 And Val(orip) <= 255 Then 'ASCII码的范围是0~255
orip = Chr$(Val(orip)) '将数字字符串orip转换为数字val(orip),求出以此数字为ASCII码值对应的字符,再次赋给变量orip
If orip >= "a" And orip <= "z" Then 'orip是小写字母
trapn = Asc(orip) - 97 '求出orip在26个小写字母中的位置,a~z的位置为97~122
trap = Chr$((trapn + Day(Now)) Mod 26 + 97) '求出按规则转换后的字符
letterlow = letterlow + 1 '计小写字母的个数
Else
If orip >= "A" And orip <= "Z" Then '大写字母
trapn = Asc(orip) - 65 '求出orip在26个大写字母中的位置,A~Z的位置为65~90
trap = Chr$((trapn + Day(Now)) Mod 26 + 65) '求出按规则转换后的字符
lettercap = lettercap + 1 '计大写字母的个数
Else '非字母
trap = Asc(orip) '字符orip转换成ASCII码值,作为译码即保持原值
If trap = 0 Then '字符oripASCII码值为0即原值为000
trap = " " '译码为空格
word = word + 1 '单词计数,因为空格分隔单词
other = other + 1 '其他字符计数,空格也是一个非字母字符
Else
If trap > 99 Then '其他字符计数
other = other + 3
Else
If trap > 9 Then
other = other + 2
Else
other = other + 1
End If
End If
End If
End If
End If
Else
trap = orip '超出ASCII码范围的值不变
End If
tra = tra + trap '译码连接到字符串tra
orip = Mid$(ori, n, 3) '取出下一个字符串
Wend
txttra.Text = tra '译文在“译文”文本框中显示
inf = "大写字母个数:" + Str$(lettercap) + Chr$(13) + Chr$(10) + "小写字母个数:" + Str$(letterlow) + Chr$(13) + Chr$(10) + "单词个数:" + Str$(word + 1) + Chr$(13) + Chr$(10) + "其他字符个数:" + Str$(other)
MsgBox inf, 0 + 64, "译文统计信息" '信息框中显示统计数据
End If
End Sub