第八课 字符串
8.0 字符型数据复习
8.1 字符串类型
8.2 字符串类型例题
8.3 练习
8.0字符型数据复习:
1、类型:char(有序型)
2、定义:var a,b:char;
3、占用空间:每个变量占用1个字节。每个变量只能存放一个字符。
4、每个字符都有唯一对应的ASCII码。
0-9            A-Z            a-z
48-57        65-90        97-122
    5、相关函数:
        (1)Chr(i)        求ASCII码为i的字符
        (2)Ord(a)        求字符的ASCII玛
        (3)Pred(a)        求字符的前趋字符
        (4)Succ(a)        求字符的后继字符
8.1字符串类型
    我们把用两个单引号括起来的一串字符称为字符串。
字符型数据的每个变量只能存放一个字符,我们如何才能保存一个字符串呢?
很容易想到的是定义一个基类型为字符型的一维数组来保存。可是,在一般程序设计语
言中,都会有一种专门用于储存和处理字符串的变量类型,其原理和字符型一维数组完
全相同,并且定义了一些相应的专用运算命令,因此,使用起来远比字符型一维数组方
便。
一、基本概念:
1、类型名:sting(有序型)
    2、定义:var s,st:string;        (最大串长为默认的256)
            var s:string[20];        (指定最大串长为20)
    3、占用空间:默认256字节,即最大串长256。如果指定最大串长为20,则占用20
个字节。注意:一个默认串长的字符串变量,哪怕是空串(一个字符都
没有),也要占用256个字节的内存空间。
    4、引用方法:
        (1)整体引用:
            var s,s1:string;
            1)读入一个串并保存到变量s中:
read(inf,s);或readln(inf,s);   
注意:当前数据行中包括当前数据项在内的后面所有内容都将被作为一个串读
入,包括空格。
例如:有输入文件:
        abc 12 34 1
      执行完上面语句后,s=abc 12 34 1,且读数指针移到最后。
再如:输入文件:
        12 abc 34 1
        执行语句read(inf,n,s,m,p);
        结果为:n=12,s=abc 34 1,m、p没有读到值。
            2)输出一个字符串:
                    write(outf,s)或writeln(outf,s)
            3) 给一个串变量赋值:
                    s:=’’;        (给字符串变量s赋一个空串,注意:空串不是空格串)
                    s:= ;        (给字符串变量s赋由一个空格组成的空格串)
                    s:=abcdefg;    (给字符串变量s赋一个串)
            4) 将一个字符串变量的值转赋给另一个字符串变量:
                    s1:=s;
        (2)下标引用:由于字符串变量实质上就是一个基类型为字符型的一维数组,因
此,它也可以像一维数组一样,按下标进行调用和使用。
当我们按照下标进行使用时,每一个字符串单元就是一个字符型
变量,完全可以与其它字符型变量和常量进行各种运算和处理。
            s:=abcdefg;
            s[2]:=B;
            write(s);                    aBcdefg
            write(s[4]);                d
            s1[1]:=s[1];
            s1[2]:=s[3];
            write(s1);                    ac
            (注意:下标引用时,每个元素等同于一个字符型变量)
5、字符串运算:
a)布尔运算:比较字符串大小,按从前到后的顺序逐个比较字符串的ASCII码,直到比出大小时停止。(与串长无关)
如:a>bcdefg,    abcdefg>abcdef
b)加法运算(字符串连接):将+号后面的串连接在+号前面的串的后面。(注意:不遵守加法交换率)
    如:abcd+efg=abcdefgefg+abcd=efgabcd
6、相关函数和过程(专用运算):
什么是函数和过程:
函数和过程:是程序设计语言预先编制和封装好的(可能是相同语言也可能是其它
语言)、预留好接口(可以接收用户的初始值并返回运行结果)、具有
一定的特定功能的程序段,用户可以根据其名称和接口参数直接使用
这些程序段来完成自己程序中的任务,二不需要再自己重新编写相应
程序代码。
但是要注意:系统封装好的函数和过程中的程序代码是无法跟踪调试的。因此,在
使用单步运行命令时,只能使用F8进行调试。(F7:跟踪时遇到函数
和过程时,进入函数和过程,主要用于后面要学到的自定义函数和过
程;F8则不进入)
        函数:
            语法:函数名(参数表)
            参数表:由常量、已赋值的变量、可计算出结果的表达式组成,每两项之间用
“,”间隔开。用于将函数运行需要的初始数据传递到函数内部。
            运行结果:函数只能运算出一个结果(不能同时有多个结果),其结果有函数
名带回给用户。
            使用方法:只可以用在各种表达式中。
                    例如:将字符’5’转变成数字5
                    var ch:char;
                        n:integer;
                    begin
                        ch:=’5’;
                        n:=ord(ch)-48;
                    end.
        过程:
            语法:过程名(参数表)
            参数表:两部分
                    第一部分:和函数一样。
                    第二部分:由已定义说明的变量组成,用于接收过程运算产生的结果,
可以有多个。
                    每两个参数之间用一个“,”间隔开。
            运行结果:过程可以运算出若干个结果(也可以是一个),但是过程名没有携
带结果返回的功能(即使只有一个运算结果),所有的结果都只能
通过参数表返回。
            使用方法:相当于一条语句进行使用。
        函数与过程的相同点:
            (1)都是系统封装好的程序段,通过名字调用即可实现相应的功能,而不需
要再自己编写相应的代码。
            (2)一般都有参数表,需要设置好参数才能正确使用。
        函数与过程的不同点:
(1)功能有所不同,函数只能返回一个值(各种类型都可);过程则可以返回
0~n个结果。
            (2)调用方式不同,函数出现在表达式中;过程直接当做一个语句来使用。
        字符串专用函数和过程:(以下变量s为字符串变量)
        提醒:以下所有函数和过程运算的时间复杂度均为O(n)(n为串长度)。
(1)测字符串长度
类别:函数
语法:length(s)
参数:一个字符串变量
返回值:整型,表示字符串变量中保存的字符串的串长(即字符个数)
          空串时返回值为0.
  实例:
var s:string;
      i:integer;
begin
      s:=’abcdefg;
      i:=length(s);
      write(i);
end.                        输出结果:7
(2)查子串位置
类别:函数
功能:判断一个字符串中是否包含另一个字符串并查第一次出现的位置
        我们把包含另一个串的字符串称为母串,被包含的串称为字串。
语法:pos(s1,s2)
参数:两个串常量或串变量,s1为子串、s2为母串
返回值:整型。
          如果母串中不包含字串,则返回0。
如果包含,则返回字串被包含时的第一个字母在母串中的位置。
              实例:
var s,s1,s2:string;
      i,i1,i2:integer;
          ss:char;
begin
        s:=abcdefg;
        s1:=def;
        s2:=abd;
        ss:=c;
        i:=pos(s1,s);                          i=4
        i1:=pos(s2,s);                        i=0
        i2:=pos(ss,s);                        i=3
end;
(3)复制子串
类别:函数
功能:将母串中的一部分复制到另一个字符串变量中。
语法:copy(s,p,q)
参数:三个参数。
        参数一:字符串型s(可以是串常量也可以是串变量)
        参数二:整型p,需要被复制的子串首字符在母串中的位置。
        参数三:整型q,需要被复制的子串的长度。
返回值:字符串型,即母串中p~q位置之间的字串。
实例:
var s,s1:string;
字符串长度和字节begin
        s:=abcdefg;
        s1:=copy(s,3,3);
        write(s1);
end.                            输出:cde
(4)插入子串
类别:过程
功能:将一个字串插入到母串中的指定位置
语法:insert(s1,s,n);
参数:三个参数
        参数一:字符串类型s1,需要插入到母串中去的字串。(传入)
        参数二:字符串型变量s,被插入的母串(传入和返回共用)
        参数三:整型n,在母串中的第n个位置插入字串s1,母串中原来第
n个位置及后面的字符向后平移。(传入)
              返回值:仍保存在串变量s中的一个新串。
实例:
    var s,s1:string;
    begin
        s:=abefg;
        s1:=cd;
        insert(s1,s,3);
        write(s);
    end.                        输出:abcdefg
(5)删除子串
类别:过程
功能:将一个字符串中一个字串删除。
语法:delete(s,n,m);
参数:三个参数
        参数一:母串(传入和返回)
        参数二:将要被删除的子串的首字符位置(传入)
        参数二:将要被删除的子串长度(传入)
              返回值:仍保存在串变量s中的一个新串。
实例:
    var s:string;
    begin
        s:=abcdefg;
        delete(s,2,4);
        write(s);
    end.                        输出:afg
(6)数值转换成字符串
类别:过程
功能:将一个数值(可以是整型或实型)转换成相应字符串。
        如:1234→1234、2.5→2.5
7.000000000000000E+000 7.000000000000000E+000’
          语法:str(a,s);
          参数:两个参数
                参数一:数值型(整型或实型+格式符),表示需要被转换的数值。(传入)
                参数二:字符串型,用于保存转换后的字符串。(返回)
          返回值:保存在串变量s中的数字字符串。
          实例:
    var s,s1,s2:string;
        i:integer;
        m:real;
    begin
        i:=1234;
        m:=1.5;
        str(I,s);
        writeln(s);                输出:1234
        str(m,s1);               
        writeln(s1);                输出:1.500000000000000E+000
        str(m:3:1,s2);               
        writeln(s2);                输出:1.5
        end.
(7)字符串转换成数值
类别:过程
功能:判断一个字符串能否被转换成数值(不包含非组成数字的非法字符),
如果能转换成功则转换成数值并保存在相应变量中。
    字符串      转换成数值的类型  是否成功  转换结果
    1234            整型              是        1234
    1234            实型          是        1.23400……E003
    1.234            整型          否          无

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。