问题 填空题

本程序实现文本加密。先给定序列:a1,a2,…,an,它们的取值范围是1~n,且互不相同。加密算法是:把原文本中第k个字符放到加密后文本的第ak个位置处。若原文本长度大于n,则只对前n个字符加密,后面的字符不变;若原文本长度
小于n,则在后面补字符“*”,使文本长度为n后再加密。
例如若给定序列a1,a2,…,a7分别为2,5,3,7,6,1,4
当文本为“PROGRAM”时,加密后的文本为“APOMRRG”
当文本为“PROGRAMMlNG”时,加密后的文本为“APOMRRGMING”
当文本为“THANK”时,加密后的文本为“*TA*HKN”
下面的过程code实现这一算法。其中参数数组a()中存放给定序列(个数与数组a的元素个数相等)a1,a2,a3,…的值,要加密的文本放在参数变量mystr中。过程执行完毕,加密后的文本仍放在变量mystr中。请填空。
Option Base 1
Private Sub code(a()As Integer,mystr As String)
Dim ch As String,cl As String
n=Ubound(a)-Len(mystr)
If n>0 Then
mystr=mystr&string(n,"*")
End If
ch=mystr
For k=______To Ubound(a)
c1=Mid(mystr,k,1)
n=______
Mid$(ch,n)=c1
Next k
mystr=ch
End Sub

答案

参考答案:1 a(k)

解析: String(个数,字符)函数可返回含指定个数字符的字符串,其中的字符参数可以是字符码或字符。如果第二个参数为字符串,则返回其首字符组成的字符串。插入字符串语句Mid$(字符串,位置[,L])=子字符串,用于将字符串从指定位置开始的字符用“子字符串”代替。
本题源程序在过程code中,通过For循环,用Mid函数逐一取出字符串mystr中的每个字符赋值给变量c1(故循环变量的初值为1),并按数组a提供的对应序列(即n=a(k)),将字符串ch的第n个字符替换为变量c1的值。

问答题
单项选择题