17xie > Quick BASIC程序设计实用教程 > 第十章 字符处理
背景:                 
[本书目录] [图书首页] [本书讨论区]  
链接地址:http://www.17xie.com/read-6170.html    注册17xie 一起来写书 实现您的出书梦想!

第十章  字符处理

前面主要介绍了计算机在数值计算中的应用,只涉及了一些简单的字符处理。事实上计算机不仅在数值计算上应用广泛,而且在非数值计算中应用范围正在不断扩大,尤其是用于事务管理领域。如图书检索,人事管理,教务管理,经济信息管理等。有关资料表明,计算机在非数值计算中的应用,要远远超过计算机在数值计算中的应用。这就要求计算机具有相当强的文字处理能力。如果一台计算机没有文字处理功能,充其量只能算是一个高级的计算器。Quick BASIC的一个非常重要的功能就是可以进行字符处理,而且它的字符处理功能十分强大。它提供了字符串变量,字符串数组,字符串语句以及丰富的字符串函数,使用起来直当灵活方便。本章主要介绍Quick BASIC对字符串的各种处理功能,涉及的主要内容有:

n          字符串变量

n          字符串变量和数组字符

n          字符串变量的赋值

n          字符串表达式及字符串的比较

n          取子字符串

n          字符串的生成

n          字符串与数值的相互转换

n          自选输出格式

10.1  字符串变量

10.1.1  字符

字符是指单个字母、数字或其他特殊符号。本书附录中的ASCII码表中,列出了IBM-PC系列微机中的字符集。

10.1.2  字符串

所谓“字符串”就是系统允许使用的若干个字符构成的序列,也称为字符串常量。一个字符串一般是用双引号括起来的一串字符。例如:

"abcdefg"     "1234567"     "This is a book"

字符串常量与数值常量一样,在程序执行过程中其值是不变的。

Quick BASIC的字符串中可以使用的字符主要是在键盘上出现的字符,包括:26个英文字母(大写字母A~Z、小写字母a~z,数字0~9,标点符号,空格,数学符号,专用符号(@、¥、~、&等)。除了键盘上出现的字符外,还可以包括用ASCII码形式给出的图形字符或控制字符。

10.1.3  字符串长度

字符串中的每一个字符在内存中占一个字节。一个字符串占据一段连续的内存单元。例如字符串“ABCDEF”有7个字符,因此它在内存中占7个单元。

字符串的长度是指字符串常量中的字符的个数。例如:

"This is a book"             该字符串的长度为14个字节

引号不是字符串的值,它只是字符串常量的起、止界限,而且在引号中不能再套引号。

例如:

"I say:"This is a book""       这是Quick BASIC中不允许的

一个汉字占两个英文字符的宽度。Quick BASIC规定一个字符串最多可以容纳32767个字符。

10.1.4  求字符串长度函数LEN

Quick BASIC提供的LEN函数可以方便、准确地测出字符串的长度。

格式:

LEN(〈字符串表达式〉)

功能:求字符串表达式中字符的个数,即字符串的长度。

说明:〈字符串表达式〉既可以是字符串常量,也可以是字符串变量。

例如:

PRINT LEN"ABCDEFG"             '输出:  7

PRINT LEN(“10*20=”)             '输出:  6

PRINT LEN""                      '输出:  1(空格也为字符)

10.1.5  字符串常量的定义

字符串常量是指在程序运行过程中始终保持不变的字符串。Quick BASIC允许使用两种形式的字符串常量。

1.显示的字符串常量

显示的字符串常量就是用双引号括起来的一串字符。如:"I am a student."

在使用字符串时应注意以下几点:

1)空格或者间隙也是一个字符,应计在字符串长度之内。

2)字符串中,大小写字母是有区别的。如"ABCD""abcd"被看成是2个不同的字符串。

3)无任何字符的串叫“空串”,用""来表示,空串的长度为零。

4)应将字符串与数值严格区分开来。例如:12345是一个数值,而"12345"则是一个字符串,其中每个都是独立的字符。字符串不能用作算术运算。

2.符号字符串常量

用一个符号名代表一个字符串常量:

CONST xm="Wang Hong"

在本程序块中,xm"Wang Hong"等价,如果有:

PRINT xm

则输出Wang Hong

为了阅读程序方便,可以在符号常量名后加“$”,以表明是字符串常量。如:

CONST xm$="Wang Hong"

注意把符号字符串常量与字符串变量相区别。字符串常量的值是不能改变的,例如下面的程序段是非法的:

CONST xm$="Wang Hong"             '定义了一个符号字符串变量xm$="Wang Hong"

xm$="Li Qiang"                    '又要用赋值语句给字符串变量xm$赋值

10.2  字符串变量和数组

10.2.1  字符串变量的定义

存放数值的变量称为数值变量,存放字符串的变量就称为字符串变量。数值型变量的值是一个数值,而字符串变量的值则是一个字符串,并且,程序执行的过程中,这个值是可以改变的。

Quick BASIC规定了两类字符串变量:变长字符串变量和定长字符串变量。

1.变长字符串变量

在程序执行过程中,变长字符串变量长度可在0~32767范围内增加或减短,这种变量使用起来比较方便灵活。

定义变长字符串变量类型的方法有3种:

1)用变量名加上类型申明符

格式:变量名$

变量名的命名规则与数值变量相同。例如:al$,b$,erx$,dap$等都是合法的变量名。例如:

jtdz$"kaifeng"

其中jtdz$就是一个字符串变量,现在已将字符串"kaifeng"赋给了变量jidz$,以后需要输出字符串"kaifeng"时,就和使用数值变量一样,直接在PRINT语句中输出变量jtdz$即可。

例如:

PRINT jtdz$

输出结果为:

kaifeng

2)用DEFSTR类型说明语句

用类型说明语句(DEFSTR语句)来定义以某个字母开头的变量为字符串变量。

格式:DEFSTR〈字母表〉

其中,字母表是单个字母或一段连续的字母范围。

例如:

DEFSTR a,m-p

ma="ABCD"

PRINT ma

上例中,DEFSTR语句是说明以am,n,o,p开头的所有变量为字符型变量,ma在的说明的范围内,所以是字符串变量。

3)在DIM语句中使用AS STRING

格式:DIM〈变量名〉AS STRING

例如:

DIM xm AS STRING

xm="Li Qiang"

PRINT xm

应注意,用DIMAS STRING语句定义字符串变量时,变量名不应包含类型说明符,例如下面的用法是非法的:

DIM xm$ AS STRING                'xm写成了xm$

2.定长字符串变量

变长字符串虽然灵活方便,但人们有时希望在某些字符串取固定的长度,尤其是在打印输出时使上下对齐。

定长字符串是指它在程序执行过程中,始终保持其长度不变的字符串。定长字符串变量的长度要用DIM语句进行说明。

格式:DIM 〈变量名〉 AS STRING*n

例如:

DIM aa AS STRING*8

在定义了aa为定长字符串变量之后,可以用赋值语句为其赋值。上面的语句说明了aa的字符长度为8,如果赋的值长度超过了8,则多余的字符被截去,如果少于8,则在其后补足空格。例如:

aa$="ABCDEF12345"         '其值为:"ABCDEF12"

aa#="ABC"                 '其值为:"ABC     "(后面补5个空格)

串变量在未赋值之前的初值为空字符串,对于可变长字符串,其长度为0;而对定长字符串,其他长度为n,即使用空格为其赋值,如aa$=""其长度不变,也为8

使用定长字符串,可以实现定格输出。

[10-1]  阅读下面的程序。

'EXAMPLE 1

CLS

DIM a AS STRING *6

FOR i=1 TO 4

READ a

PRINT i,a

NEXT i

DATA ABCDEFGHIJKLMN,ABC,XYZOP ,&&&&&&&&

END

运行结果为:

1     ABCDEF

2     ABC

3     XYZOP

4     &&&&&&

从上例的输出结果可以看出,字符串是以左边对齐,右边补空格的形式输出的。

10.2.2  字符串数组

字符串数组的概念与前介绍的数组相似,即字符串数组是一组有序的字符串变量的集合。字符串数组中的元素称为“串下标变量”。根据字符串数组的维数,同样可分为:一维、二维、三维等。例如:

a$28,b$2,3,c$10,20,30

其中a$,b$,c$均为字符串数组名,其下标书写规则同数组下标变量。在同一程序中,字符串数组名与字符串变量名可以相同。当程序中使用字符串数组时,同样使用DIM语句进行说明。一个DIM语句可同时对字符串数组和数值数组进行说明。例如:

DIM a8,b2,3,a$5,cb$4,5

[10-2]  有一班级学生,要求按学生姓名的汉语拼音顺序输出。

问题分析:建立数组来存放学生姓名,用字符串比较的方法来实现顺序输出。程序为:

'EXAMPLE 2

CLS

DIM a$6              '定义字符串数组

FOR i=1 TO 6           '各数组元素读入数据

READ a$i

NEXT i

FOR i=1 TO 5           '排序

p=i

FOR j=i+1 TO 6

IF a$j<a$pTHEN p=j

NEXT j

IF p<>i THEN SWAT a$p,a$i    '交换数组元素的值

NEXT i

FOR i=1 TO 6                     '排序后输出

PRINT a$i                      '输出

NEXT i

PRINT

DATA  "AHANG SAN","LIU FENG","WANG AHI"

DATA  "SONG HONG","YANG PING","KANG XIANG"

END

程序运行结果为:

KANG XIANG

LIU FENG

SONG HONG

WANG HAI

YANG PING

ZHANG SAN


字数:6286    最后更新:1年以前 [08-16 19:50]我爱钱 修改
本页编辑者:我爱钱  
[前一页]:第九章  [后一页]:第十章
[在本页中加入书签] [收藏本书] [推荐本书]
  17xie论坛 > 本书讨论区 > 本页评论   (共0条)
发表评论

用户名称 匿名发表
评论内容
验证码

关于我们 | 版权声明 | 免责声明 | 诚聘英才 | 联系我们 | 合作伙伴 | 友情链接 | 广告合作 | 提交意见
Copyright © 2007 17xie.com 互联网协同写书平台 京ICP备08002671号