字符串处理

字符串处理技巧
本文介绍字符串处理的基本概念,包括测长、取子串、数值与字符串转换等函数,并讲解字符串比较与排序的原则,以及检索、替换等基本操作。

字符串的处理

 

 字符串函数

比较与排序

基本操作

 

一、字符串函数

1、测长函数:LEN(x$)  (LENGTH(x$))

    功能:测出字符串x$的长度。

    说明:(1)函数自变量x$可以是字符串、字符串变量或字符串连接式。

          (2)字符串的长度一般是指字符串中各字符代码在内存中的长度。

          (3)在QBASIC中一个常数通常前后各占一空,但转成字符串后只保留了前面的空格(符号位)。

 

2、取子字符串函数

    从一个字符串中取出的一部分连续的字符组成的字符串,就叫做原来的字符串的子字符串,而原来的字符串也称作源字符串。

(1)左取子串函数:LEFT$(x$,n)

    功能:截取源字符串x$的最左端的 n 个字符。若 n 大于源串长度则取全部源串。

(2)右取子串函数:RIGHT$(x$,n)

    功能:截取源字符串x$的最右端的 n 个字符。若 n 大于源串长度则取全部源串。

(3)中间取子串函数:MID$(x$,m,n)

    功能:从源字符串x$的第 m 个字符起截取 n 个字符。若 m 大于源串长度或 n 为零则取出空串,如果 m+n-1 大于或等于源串长度或者去掉 n ,则取源串中第 m 个字符起右边所有字符。

注:PASCAL中取子串函数只有一个(COPY(S$,m,n)),这与QBASIC的中间取子串函数一样。

 

3、数值与字符串之间的转换

(1)、求字符所对应的ASCⅡ码函数:ASC(x$)  (ORD(x))

    功能:求出字符串x$左端第一个字符的ASCⅡ码。

    说明:应记住以下字符的ASCⅡ码。

字符

0-9

A-Z

a-z

ASCⅡ码

48-57

65-90

97-120

(2)、求ASCⅡ码所对应的字符函数:CHR$(x)  (CHR(n))

    功能:把ASCⅡ码 x 转变成相对应的字符。

    说明:x 不能大于255。

(3)、将数值转换成字符串的函数:STR$(x)  STR(x[:宽度[:小数位数]],strg)

    功能:把数值 x 转换成字符串(数字型字符串)。

    说明:在PASCAL语言中没有这种函数,但PASCAL提供了一个STR语句来实现这个转换。也就是说STR语句是把算术表达式 x 的值按要求转换成字符串,存入变量strg中。

(4)、将数字型字符串转换成数值的函数:VAL(x$)  VAL(strg,n,code)

    功能:把数字型字符串x$转换成相应的数值。

    说明:如果字符串左边第一个字符为非数字字符时,则VAL函数的值为0,如果x$中间有一个非数字字符(E除外),则它的值只取到这个非数字字符左端的数值。如果这个非数字字符为E,则会自动显示标准的科学记数法形式的数值。

    PASCAL语言中没有这种函数,但PASCAL提供了一个VAL语句来实现这个转换。也就是说VAL语句把字符串的数值 strg 转换成数值型数据存入变量 n 中,如果转换正确则 code 中存入 0 ,否则存入出错的位置。(code必须是整型变量)

 

练习:

1、由键盘输入一个字符串,按相反的顺序把它打印出来。

2、由键盘输入10个带有小数点的数字,使其在屏幕中间位置,按小数点对齐的格式打印出来。

 

二、字符串的比较与排序

    字符串之间用关系符号连接,叫做字符串的比较。由于字符串在计算机内部都是以ASCⅡ码输入和存储的,所以字符串的比较实际上就是字符串中字符的ASCⅡ码的比较。首先,两个字符的比较有以下的比较规则:

1、数字字符比字母字符小。

2、大写字母比小写字母小。

3、同一字体的字母,英文字母顺序排在前面的比排在后面的小。

4、空格比一般字符都小。

5、汉字的比较是以拼音字母对应的ASCⅡ码的大小作为比较的依据。

    两个字符串大小的比较的规则如下:

1、如果两个字符串的第一个字符不一样,则第一个字符的ASCⅡ码大的字符串就大。

2、两个字符串如果第一个字符一样,则比较第二个字符,……以此类推。

3、如果两个字符串长度不同,而前面的字符都相同,由长度大的字符串大。

4、如果两个字符串完全一样,则这两个字符串相等。

    既然字符可以比较大小,它们就可以排序,排序的原理与方法和数值一样。

例:输入一个多位自然数,然后将各位重新排列成一个仍由原来的那些数字组成的位数不变的最大数和最小数。

分析:由原来的数字组成的位数不变的数中,越大的数字就应该越靠在前面(左边),则它的数值就越大,如果越小的数(零除外)越靠前,则它的数值就越小。

    所以,我们首先要做的是把这个自然数一个个数字拆开,然后把所有的数字排序,然后组成最大的数,而最小的数则必须让最小的非零数码放在第一,然后跟上所有的零,最后从小到大排其他的数字。

源程序:略

 

练习:

1、键盘输入一个多位自然数,然后将各数数字重新排列成一个仍由原来数字组成的位数不变的比原数大的最小数。

 

三、字符串的基本操作

    在字符串的基本操作中,除排序外,还有连接、分离、删除、插入、检索、替换等。而这一切都是以检索(查询)为基础。

1、字符串的检索函数:INSTR(x,a$,s$)    (POS(s1,s2))

    功能:从字符串a$中第 x 个字符开始查找子串s$在a$中的起始位置。

    说明:a$为原串,s$为要查找的子串,x 表示从源串中的第几个字符开始查找,取值范围是1-255,若取0则出现非法数据错误,但可以省略,表示从源串的第一个字符开始查找。

    PASCAL中使用POS函数来返回子串在源串中的起始位置。

2、替换字符串语句:MID$(a$,n,x)=x$

    功能:从源字符串a$中第 n 个字符开始,用字符串x$替换源字符串中的 x 个字符。

    说明:一般x$中字符个数应等于 x ,若x$中字符个数少于 x 个,则被修改替换的字符的个数就只等于x$中的字符个数,若x$中的字符个数大于 x 时,则被修改替换的字符仍为 x 个,x$中多余的字符就没用了。

如:a$="ABCDEF"

则:语句MID$(a$,2,4)="GHIJ"使a$的值变为"AGHIJF"

    语句MID$(a$,2,4)="K"使a$的值变为"AKCDEF"

    语句MID$(a$,2,4)="LMNOPQ"使a$的值变为"ALMNOF"

    PASCAL语言中没有直接给出替换的语句,方法只能是先查找然后删除,再插入新串。

3、连接

    就直接使用“+”运算就可以了

    PASCAL如果连接两个字符串也可以使用“+”运算,但PASCAL还提供了一个函数,可以把多个字符串连接成一个字符串。(CONCAT(串1,串2,串3,…))

4、分离

    我们在上一节的数字的分离的第三种方法已经详细地讲过了。

5、删除

    方法就是先查找到删除的字符,然后把它分离出来,再把前后的两个子串连接起来就可以了。

6、插入

    先查找到插入点,然后把源串分开,然后在两个子串中间连接上要插入的字符就可以了。

 

练习:

1、统计一篇文章中每个英文字母出现的频率。

2、设计一个程序,统计一篇全部用英语写作的文章中各种长度的英文单词出现的次数。要求打印出:单词的长度(即英文字母的个数),出现的次数和所占的百分比。输出格式如下:

LengthFrequency%
5818.6
2416.27
4511.62
…………………………
Total=43

    请用下面的这段文字来测试你的程序:

    Consider a paragraph containing several lines of text information. You are to write a program to print a word length frequency table. This table should list the word length, frequency of occurrences, and percentage, in three columns, in order of high test frequency first.

 

 

 

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值