我们已经知道要把一个数值送给一个数值型变量,可以使用LET、INPUT、READ…DATA语句来实现。同理也可以使用这3种赋值语句字符型变量赋值,另外还可以用行输入语句LINE INPUT语句来为串变量赋值。
与数值变量相同,但要注意字符串常量必须用双引号括起来。
例如,下面的程序用LET语句对字符型变量赋值。
CLS
LET b$="BeiJing"
LET c$="ShangHai"
PRINT b$,c$
END
运行结果为:
BeiJing ShangHai
INPUT语句也可以用来从键盘输入字符串数据,其用法与从键盘输入数值数据基本相同。但要注意:
(1)在键盘上输入字符串变量的值时,字符串可用引号也可不用引号括起来。但在下列情况下必须用引号括起来:
n 字符串中有首尾空格时,要用引号括起来。否则首尾空格被删去。
n 字符串中带有逗号时,要用引号括起来。因逗号是两个数的分隔符,否则一个字符串将在逗号处分开。
(2)在一个INPUT语句中可以既有数值型变量又有字符串变量,当从键盘回答时,应键入相应的数字和字符串。否则把一个字符串赋给一个数值型变量时将会出错。
(3)建议初学者在用INPUT语句给变量赋值时,最好用引号将字符串括起来,以避免不必要的出错。
[例10-3] 阅读下面的程序。
'EXAMPLE 3
CLS
INPUT"姓名:";xm$
INPUT"学号:";xh$
PRINT xm$,xh$
运行结果为:
姓名:? Wang Hong
学号:? 2000102
Wang Hong 2000102
READ…DATA语句除了可以用来读入数值变量外,还可以读字符串。其用法与数值型数据基本相同。但要注意:
(1)在一个READ语句中既可以出现数值型变量,也可以出现字符串变量,同样在DATA语句中也可以出现这两类数据。
(2)如果READ语句中既有数值型变量,又有字符型变量,那么DATA语句中相应的数据类型,必须与READ语句中相应的数据类型一致,否则将会出现数据类型不匹配的错误。
(3)DATA中的字符串可用引号也可不用引号括起来。但在下列情况下必须用引号括起来:
n 字符串中有首尾空格时,要用引号括起来,否则首尾空格被删去。
n 字符串中带有逗号时,要用引号括起来。因逗号是两个数的分隔符,否个字符串将在逗号处分开。
[例10-4] 编制程序,输出学生姓名、学号、年龄、成绩,假设总共有6个学生。
程序为:
'EXAMPLE 4
CLS
PRINT"姓名","学号","年龄","总分"
FOR i=1 TO 6
READ na$,no$,age,totaol
PRINT na$,no$,age,totaol
NEXT i
DATA "丁红莉","101",15,578
DATA "李小翔","102",16,532
DATA "刘大勇","103",15,512
DATA "杜姗姗","104",17,590
DATA "孙 红","105",16,580
DATA "张小华","106",16,587
END
运行结果为
姓名 学号 年龄 总分
丁红莉 101 15 578
李小翔 102 16 532
刘大勇 103 15 512
杜姗姗 104 17 590
孙 红 105 16 580
张小华 106 16 587
格式:
LINE INPUT[;]["〈提示字符〉";]〈串变量〉
功能:从键盘上读入一整行字符串(从提示字符之后到按回车键之前的所有字符),赋给字符串变量。
说明:
(1)如果LINE INPUT后紧跟一个分号,那么按回车键结束输入时,光标仍保留在输入的同一行上。
(2)LINE INPUT语句称为行输入语句,执行此行语句时,提示字符的后面不显示问号“?”,这一点是与INPUT 语句不同的。
(3)LINE INPUT 语句对输入的字符没有限制,包括引号、逗号、空格等,这一点弥补了INPUT语句的不足。
(4)该语句一行最多可以连续输入32767个字符。
(5)输入字符串的中途,按〈Ctrl〉+〈Break〉键能停止行输入语句的操作,这时,返回到命令状态并显示OK。如果需要,可以输入CONT命令,再重新执行LINE INPUT语句。
[例10-5] 观察下面的程序及运行结果。
程序为:
'EXAMPLE 5
CLS
PRINT"*********************"
LINE INPUT"A$=";a$
PRINT"*********************"
PRINT a$
PRINT"*********************"
END
运行结果为:
**********************
A$= She said:"Good Moring!"
*********************
She said:"Good Moring!"
**********************
字符串运算符只有一个,就是“+”,它把两个或多个字符串型的常量、变量、函数依次首尾连接起来,组成一个新的字符串。
其一般格式为:
x1$+x2$+x3$+…
其中,“+” 连接运算符,x1$,x2$,x3$,…,为字符型常量、变量或字符型函数。
例如:
"THIS"+"IS"+"A"+"BOOK"
将得到一个新的字符串:
THIS IS A BOOK
用“+”将字符串数据连接起来的式子,称为字符串表达式。连接后的字符串长度不应超过32767个字符。
“+”两侧可以是字符串常量、字符串变量或值为字符串的函数。
同数值表达式一样,可以将一个字符串表达式的值赋给一个字符串变量或字符串数组元素。例如:
ss$="THIS"+"IS"+"A"+"BOOK"
则ss$的值为
THIS IS A BOOK
在非数值计算中,经常会遇到字符串的排序或检索问题。例如要求检索学生学号,并按学号排序,这就产生了字符串的比较问题。
用关系运算符可以写出各种不同的关系表达式。例如:
x$="Quick BASIC"
"THE"<"THESE"
"NAME"+"LI HAO">"LIU BING"
关系表达式只有“真”、“假”两个值。如执行第一句时,若x$中存放的也是Quick BASIC,则表达式的值为“真”,否则为“假”(式中的“=”是关系运算符,而不是赋值语句)。
在计算机内部,所有字符都是以ASCII码表示的。比较两个字符的大小,就是比较它们ASCII码值大小,例如字符A的ASCII码值为65,B为66,所以关系表达式"B">"A"的值为“真”。
当两字符串的长度不等时,其比较的方法是将两个字符串从左至右逐个字符进行比较,直到出现不同的字符为止,其字符串的大小就由这两个不同的字符在ASCII码中的位置而定。
字符串比较有如下简单的规律:
(1)同规格的字母比较,按字母的顺序排,后面的大。
(2)大小写字母比较,小写字母大于该大写字母。
(3)数字字符比较,按数值的大小排,数值大的大。
(4)字母与数字比较,数字(0~9)的代码均小于字母(A~Z)的代码。
(5)空格比数字、标点、字母等常见符号都小。
记住这以上几点就可以较快得出比较的结论。
[例10-6] 阅读下面的程序。
'EXAMPLE 6
CLS
INPUT"ARE YOU A TEACHER?";x$
IF x$="YES"THEN
PRINT"YOU ARE A TEACHER!"
ELSE
PRINT"YOU ARE NOT A TEACHER!"
END IF
END
在执行该程序时,如果输入“YES”,则程序自动输出“YOU ARE A TEACHER!”,如果输入“yes”,则程序就按非“YES”对待,程序将自动输出“YOU ARE NOT A TEACHER!”,这是因为大小写字母是不同的字符,另外空格也参与比较,“YES”与“ YES”是不相等的两个字符串。
[例10-7] 有若干个城市的名字,找出按英字母顺序排列在最后面的城市名字。
程序为:
'EXAMPLE 7
CLS
READ a$ '读入第一个名字
FOR i=1 TO 7
READ b$ '读数
IF a$<b$ THEN a$=b$ '比较较大字符串数据
NEXT i
PRITN "This last city is:";a$ '输出结果
END
DATA "BEI JING","SHANG HAI","CHANG CHUN","WU HAN"
DATA"XI AN","LUO YANG","ZHENG ZHOU","ZHOU KOU"
程序运行结果为:
This last city is : ZHOU KOU
在用计算机进行文字处理时,常利用INSTR函数来从一段文章中查找某一个关键字。其查找过程无非是利用字符串的比较来进行的。
格式:INSTR(n,y$,x$)
功能:从y$中但找子串x$的位置。
说明:
(1)n为一数值表达式,其值表示查找的起始位置,1≤n≤255.省略n时,默认为1。
(2)x$,y$为字符串表达式。
(3)如果y$中含有x$,则输出x$在y$中的位置。
如果n>LEN(y$)或者找不到x$,则INSTR函数的值为0。
如果从n开始,x$在y$中不止出现一次,则只指出第一次出现的位置。
[例10-8] 阅读下面的程序。
'EXAMPLE 8
a$="BASIC PROGRAMMING"
PRINT INSTR(a$,"BASIC"),
PRINT INSTR(a$,"A"),
PRINT INSTR(4,a$,"A"),
PRINT INSTR(a$,"Y")
END
运行结果为:
1 2 12 0
[例10-9] 编制一个查找某学生姓名的程序。
问题分析:
(1)将全部学生的学号和名字放在DATA语句中。
(2)输入要找的学生名字,与注册的学生名一一进行比较,如找到了(两名字相等)就输出结果,并显示是否还要找?如果找不到,就显示“找不到”等信息。
设置变量:
n$,c 为在册学生名及学号
x$ 为要找的学生名
d$ 回答是否还要继续找
f 判断标志
f=0 表示没有找到
f=1 表示已找到
n 在册学生数
I 计数器
程序为:
'EXAMPLE 9
f=0
i=1
n=6 '假设学生数为6
DO WHILE f=0