已有23人关注
用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
分享到:
手机同步功能介绍
友情提示:以下图书配套资源能够实现手机同步功能
明日微信公众号
明日之星 明日之星编程特训营
客服热线(每日9:00-17:00)
400 675 1066
mingrisoft@mingrisoft.com
吉林省明日科技有限公司Copyright ©2007-2022,mingrisoft.com, All Rights Reserved长春市北湖科技开发区盛北大街3333号长春北湖科技园项目一期A10号楼四、五层
吉ICP备10002740号-2吉公网安备22010202000132经营性网站备案信息 营业执照