PRINT TAB(20);"输入学生名:";
INPUT x$
DO
READ n$,c '每次读一个学生名及学号
IF x$=n$ THEN f=1 'f=1表示已找到
i=i+1
LOOP UNTIL i>n OR f=1
IF f=0 THEN
PRINT TAB(20);"没有找到!"
ELSE
PRINT"姓名:"x$;"已找到","学号为";c
END IF
PRINT"继续找吗(Y/N)?";
INPUT d$
IF d$="Y"ORd$="y"THEN
f=0
RESTORE '要继续找,则重新设f=0并恢复数据区
ELSE
f=1
END IF
i=1
LOOP
DATA Li Fang,1,Yang Hua,2,Liu Ying,3,Du Hua,4,Sun Hong,5,Wang Xiw,6
END
程序运行结果为:
输入学生名:Wang Hong
没有找到!
继续找吗(Y/N)?Y
输入学生名: LiFang
姓名:Li Fang 已找到 学号为 1
继续找吗(Y/N)?N (结束程序)
子字符串是从一个字符串中抽出一组相连的字符组成的中一个新的字符串,简称子串,又称字符串的分割。实际上,子串是字符串的一部发。例如a$的值为“ABCDEFG”则“DEF”就是a$的一个子串,当然一个字符串可以有多个子串,如“ABC”,“A”,“EFG”等等都是a$的子串。
取子串的方法,可以利用LEFT$、RIGHT$、MID$等函数从一个字符串的左边、右边或中间取一部分字符出来。
格式:
LEFT$(x$,n)
功能:从x$的左边第一个字符起,取出n个字符组成一个子字符串。
说明:
(1)0≤n≤255。
(2)如果n≥x$的长度时,则得到整个字符串;如果n=0,则得到空字符串(即子串长度为零)。
[例10-10] 阅读下面的程序。
'EXAMPLE 10
a$="KAIFENG.HENAN.CHINA"
PRINT LEFT$(a$,8)
END
运行结果为
KAIFENG.
[例10-11] 有一批城市名字是用汉语拼音拼写的,希望打印出字母以“ZH”开头的城市名。
程序为:
'EXAMPLE 11
CLS
FOR i=1 TO 8
READ a$
IF LEFT$(a$,2)="ZH"THEN PRINT a$
NEXT i
DATA "ZHU HAI","XI AN","ZHENG ZHOU","ZHOU KOU"
DATA"LUO HE","SAN MEN XIA","ZHU MA DIAN","ZHEN JIANG"
END
运行结果为:
ZHU HAI
ZHENG ZHOU
ZHOU KOU
ZHU MA DLAN
ZHEN JIANG
格式:
RIGHT$(x$,n)
功能:从x$的右边取出n个字符串组成一个子字符串。
说明:同LEFT$函数一样。
[例10-12]某校学生学号的最后两位是表示学生性别 ,后面两位是“
程序为:
'EXAMPLE 12
boy=0 '男生人数计数器赋初值
girl=0 '女生人数计数器赋初值
INPUT "输入需统计的学生总数:",n
FOR i=1 TO n '输入n个学生学号
INPUT "请输入学生学号:"a$
IF RIGHT$(a$,2)="10"THEN
girl=girl+1
ELSE
boy=boy+1
END IF
NEXT i
PRINT "boy=";boy
PRINT "girl=";girl
END
程序运行结果为:
输入需统计的学生总数: 6
请输入学生学号: 9910110
请输入学生学号: 9934044
请输入学生学号: 9910230
请输入学生学号: 10010110
请输入学生学号: 45800610
请输入学生学号: 902218810
boy= 2
girl= 4
格式:
MID$(x$,m[,n])
功能:从x$中第m个字符开始,取n个字符组成一个子字符串。
说明:
(1)1≤m≤255,0≤n≤255。
(2)当n=0或m大于字符串的长度时,得到空字符串。
(3)当n省略或大于要取的字符串长度时,则得到从m开始的怕有字符。
[例10-13] 将26个英文字母按逆序打印出来。
'EXAMPLE 13
CLS
a$="ABCDEFGHIJKLMNOPQRSTUVWXYZ"
PRINT"逆序打印26个英文字母为:"
FOR i=26 TO 1 STEP -1
PRINT MID$(a$,i,1);
NEXT i
END
程序运行结果为:
逆序打印26上英文字母为:
ZYXWVUTSRQPONMLKJIHGFEDCBA
在用定长字符串时,经常要删除其首尾空格。可利用下面的函数实现。
格式:
LTRIM$(x$)
RTRIM$(x$)
功能:LTRIM$(x$)函数能删除x$开头的空格;RTRIM$(x$)函数能删除x$结尾的空格。
[例10-14] 阅读下面的程序。
'EXAMPLE 14
CLS
DEFSTR x 'x为可变长字符串变量
DIM x AS STRING*8,y AS STRING*8 'x,y为定长串变量
x="Quick BASIC,"
y=" good"
PRINT x,"长度=";LEN(x)
PRINT y,"长度=";LEN(y)
x=RTRIM$(x) '消右边空格
y=LTRIM$(y) '消左边空格
PRINT x,"长度=";LEN(x)
PRINT y,"长度=";LEN(y)
END
运行结果为:
Quick BASIC, 长度=8 (x的右边补1个空格)
good 长度=8
Quick BASIC, 长度=8 (x的右边补1个空格)
good 长度=8
前面介绍了用赋值的方法可以生成一个字符串,现在我们介绍使用STRING$,SPACE$函数来生成一串由某个字符重复组成的字符串。
格式:
STRING$(n,m或x$)
功能:得到一个由n个ASCII码m个对应的字符组成的字符串,或得到由n个x$中第一个字符所组成的字符串。
说明:
(1)0≤n≤255,0≤m≤255。m为数值时,则代表该字符的ASCII码。
(2)这个函数常用于制图或打印表格,例如打印一行“-”或“*”等。
[例10-15] 阅读下面程序。
'EXAMPLE 15
PRINT STRING$(10,"*")
PRINT STRING$(7,66)
PRINT STRING$(10,"-")
PRINT STRING$(12,"bcd")
END
程序运行后输出:
**********
BBBBBBB
----------
bbbbbbbbbbbb
格式:
SPACE$(n)
功能:产生n个空格组成的空格字符串。
说明:
(1)0≤n≤255。
(2)该函数常用于数据对齐、规定格式等输出。
在程序中经常需要将某些大写字母改写成小写字母,或把小写字母改写成大写字母。在Quick BASIC中可以利用LCASE$、UCASE$函数进行变换。
格式:
LCASE$(x$)
UCASE$(x$)
功能:LCASE$(x$)函数把x$中的大写字母改写成小写字母;UCASE$(x$)函数把x$中的小写字母改写成大写字母。
例如:
PRINT LCASE$("ABCdefghijk")
PRINT UCASE$("ABCdefghijk")
输出:
abcdefghijk
ABCDEFGHIJK
这两个函数可以使键盘输入标准化,简化两个字符间的比较。例如:
INPUT"输入(yes/no)";a$
IF LEFT$(a$,1)="Y"OR LEFT$(a$,1)="y"THEN n=n+1
可以利用UCASE$函数简写为:
IF UCASE$(LEFT$(a$,1))="Y"THEN n=n+1
字符串中的字符一般是没有改变的,若要改变,需重新设置一个串变量。而Quick BASIC提供的MID$语句(不要与MID$函数混淆)能够通过置换的办法来改变字符串中的字符。
格式:
MID$(x$,m,n)=y$
功能:在x$中从位置m开始被y$中的前n个字符置换,从而改变x$的值。
说明:
(1)1≤m≤255,0≤n≤255。
(2)选择项n表示改变x$中字符的个数,如果省略n或n>LEN(y$),则用y$的全部字符去置换。
(3)执行此语句后,x$的长度是不能改变 。当需要置换的位置不够时,多余的y$中的字符被截去。
[例10-16] 阅读下面的程序。
'EXAMPLE 16
a$="ABCDEFG"
b$=a$:c$=a$:d$=a$
MID$(b$,4,3)="XXX"
MID$(d$,4,3)="XX"
MID$(d$,4,3)="XXXXXX"
PRINT a$;b$;c$:d$
END
运行结果为:
ABCDEFG ABCXXXG ABCXXFG ABCXXXG
[例10-17] 编制程序,将"Your are a student"中的小写字母全部改成大写字母。
问题分析:
(1)从ASCII码表中查得,小写字母在97~122之间,与大写字母的ASCII码值相差32。从标题中逐个取出字符,用ASC函数将它转换成ASCII码,如果此值在97~122之间,说明它为小写字母。
(2)将小写字母的ASCII码值减去32后,利用CHR$函数和MID$语句转换成大写字母,去置换相应的小写字母,即MID$(x$,1,1)=CHR$(x-32)。
程序为:
'EXAMPLE 17
CLS
a$="You are a student"
cd=LEN(a$)
FOR i=1 TO cd
dgzf=ASC(MID$(a$,i,1)) '取一个字符转换成ASCII码
IF dgzf>96 AND dgzf<123 THEN '判断是否为小写字母
MID$(a$,i,1)=CHR$(dgzf-32) '用大写字母置换小写字母
END
NEXT i
PRINT a$
END
运行结果为:
YOU ARE A STUDENT
Quick BASIC不允许将数值赋值给一个字符串变量,也不允许将字符串变量赋给数值变量,否则将会产生数据类型不匹配的错误。现在我们介绍ASCII码与字符的相互转换以及数值与字符的相互转换。
格式:
ASC(x$)
功能:将x$的第一个字符转换成它所对应的ASCII码,并以十进制形式表示。
说明:如果x$是空串,则输出“非法函数调用”的错误信息。
例如:
PRINT ASC("A") '输出:65
PRINT ASC("J") '输出:74
PRINT ASC("BGFJ") '输出:66