qingliangyou的博客

VB程序设计的常用算法

分类:默认分类  人气:395  评论:0  时间:2012-04-02 02:01

十一、字符串的一般处理

1.简单加密和解密

加密的思想是:

将每个字母C加(或减)一序数K,即用它后的第K个字母代替,变换式公式: c=chr(Asc(c)+k)

例如序数k5,这时 "A" "F" "a"→?"f""B"→?"G"…

当加序数后的字母超过"Z""z" c=Chr(Asc(c)+k -26)

例如:You are good Dtz fwj ltti

解密为加密的逆过程

将每个字母C减(或加)一序数K,即 c=chr(Asc(c)-k),

例如序数k5,这时 "Z""U" "z""u""Y""T"…

当加序数后的字母小于"A""a" c=Chr(Asc(c)-k +26)

下段程序是加密处理:

i = 1: strp = ""

nL = Len(RTrim(strI))

Do While (i <= nL)

strT = Mid$(strI, i, 1) '取第i个字符

If (strT >= "A" And strT <= "Z") Then

iA = Asc(strT) + 5

If iA > Asc("Z") Then iA = iA - 26

strp = strp + Chr$(iA)

ElseIf (strT >= "a" And strT <= "z") Then

iA = Asc(strT) + 5

If iA > Asc("z") Then iA = iA - 26

strp = strp + Chr$(iA)

Else

strp = strp + strT

End If

i = i + 1

Loop

Print strp

2统计文本单词的个数

算法思路:

1)从文本(字符串)的左边开始,取出一个字符;设逻辑量WT表示所取字符是否是单词内的字符,初值设为False

2)若所取字符不是空格逗号分号感叹号等单词的分隔符,再判断WT是否为True,若WT不为True则表是新单词的开始,让单词数Nw=Nw+1,让WT=True;

3)若所取字符是空格逗号分号感叹号等单词的分隔符, 则表示字符不是单词内字符,让WT=False;

(4) 再依次取下一个字符,重得(2(3)直到文本结束

下面程序段是字符串strI中包含的单词数

Nw = 0: Wt = False

nL = Len(RTrim(strI))

For i = 1 To nL

strT = Mid$(strI, i, 1) '取第i个字符

Select Case strT

Case " ", ",", ";", "!"

Wt = False

Case Else

If Not Wt Then

Nw = Nw + 1

Wt = True

End If

End Select

Next i

Print "单词数为:", Nw

十二、穷举法

穷举法(又称枚举法)的基本思想是:一一列举各种可能的情况,并判断哪一种可能是符合要求的解,这是一种在没有其它办法的情况的方法,是一种最的方法,然而对一些无法用解析法求解的问题往往能奏效,通常采用循环来处理穷举问题。

例: 将一张面值为100元的人民币等值换成1005元、1元和0.5元的零钞,要求每种零钞不少于1张,问有哪几种组合?

Dim i%, j%, k%

Print "5 1 0.5"

For i = 1 To 20

For j = 1 To 100 - i

k = 100 - i - j

If 5.0 * i + 1.0 * j + 0.5 * k = 100 Then

Print i, j, k

End If

Next j

Next i

十三、递归算法

用自身的结构来描述自身,称递归

VB允许在一个Sub子过程和Function过程的定义内部调用自己,即递归Sub子过程和递归Function函数。递归处理一般用栈来实现,每调用一次自身,把当前参数压栈,直到递归结束条件;然后从栈中弹出当前参数,直到栈空。

递归条件:1)递归结束条件及结束时的值;(2)能用递归形式表示,且递归向终止条件发展。

例:编fac(n)=n! 的递归函数

Function fac(n As Integer) As Integer

If n = 1 Then

fac = 1

Else

fac = n * fac(n - 1)

End If

End Function

评论(0)
暂无评论
我来评论
(800字以内)
博客分类
最新阅读用户
monkey818gd