Dancing with Strings

http://baskent.edu.tr/~tkaracay/etudio/ders/prg/pascal/PasHTM1/pas/pasl1007.html

Hi ! We meet again ! Now, I would like to discuss about strings in depth.
How are you doing ? Well, I'm having health problem this day and I need a
rest. I am still able to write this to you. Cheer !
Topics discussed this time are :

  1. String as array of char
  2. Limited length string
  3. String manipulation commands :
    Length, Copy, Pos, Val, Str, Concat, Insert, Delete, Fillchar
  4. String as a pointer of characters (PChar), introduction

Let's begin !

Actually, string is an array of characters. So, suppose s is a string. s[1]
is equal to the first character of s. s[2] is the second character, and so on. Look at this :


var
s : string;
begin
s:='Hello, dear';
writeln(s);
s[1]:='J'; { Replace the first character with J }
s[5]:='y'; { Replace the fifth character with y }
writeln(s); { Jelly, dear }
writeln('The length of s is ',ord(s[0]));
end.

Zeroth character is the character form of the length of that string. So, ord(s[0]) denotes the actual length of s. You may replace it with length(s) which gives the same effect.

Normally, strings would hold 80 characters in maximum. Suppose you would have a set of strings that is about 10 characters long. Declaring each as normal string would be a waste of space. Pascal provides facility to limit the string length. If you would like to have a string that has maximum limit of 10 characters, you would write :

var
s : string[10];

Pascal also provides routines to manipulate string :

  1. Length : return string length.
    Syntax : length(s)
    Example : n:=length(s);
    Suppose s:='Who are you ?'; n would be 13.
  2. Copy : get an excerpt from a string.
    Syntax : copy(s,from,howmuch)
    Example : st:=copy(s,5,3);
    Get an excerpt of 3 characters from s, beginning from the 5th character.
    Suppose s:='Who are you ?'; st will be 'are'.
    Note that if index from is greater than the length of s, st would be
    empty, example :
    st:=copy(s,15,4); { empty string }
    If howmuch exceed the end of the string s, it returns the remainder
    of the string, example :
    st:=copy(s,9,10); st would be equal to 'you ?'
  3. Pos : get the position of a substring from a string.
    Syntax : Pos(substr,s)
    Example : n:=pos('are','Who are you ?'); { n:=5; }
    If the substring is not found, it returns 0.
  4. Val : converts strings to numeric.
    Syntax : val(strvar,numvar,errorcode)
    strvar is a string variable to be converted,
    numvar is any numeric variable either integer or real, and
    errorcode is an integer variable that holds the error code.
    If errorcode is 0, conversion success. Otherwise, it points at the position
    of strvar that cause failure. Example :

    var
    s : string;
    e : integer;
    r : real; begin
    write('Enter a number : '); readln(s);
    val(s,r,e);
    if e<>0 then
    writeln('Error at position : ',e);
    else
    writeln('That was : ',r:4:3);
    end.

  5. Str : converts numeric into strings.
    Syntax : str(numvar,strvar)
    Example :

    var
    s : string;
    i : integer;
    begin
    write('Input an integer : '); readln(i);
    str(i,s);
    writeln('That was : ',s);
    end.

    Note that if you deal with real, you may format it before you convert it into strings. Suppose r is a real variable, s can be like this :

          str(r:4:3,s);
    

    s consists of 4 digits before the decimal point of r, and 3 digits after the decimal point. Example :


    var
    s : string;
    r : real;
    begin
    write('Input a real : '); readln(r);
    str(r:4:3,s);
    writeln('That was : ',s);
    end.

  6. Concat : Concatenates two or more strings
    Syntax : concat(s1,s2,...,sn)
    Example : st:=concat(s1,s2);
    If s1='ABC' and s2='DEF', st would be 'ABCDEF'
    st:=concat('Borland ','Pascal ','ver. ','7.0');
    Would be 'Borland Pascal ver. 7.0'
    You may put as many parameters to concat as possible. If the
    resulting string length is more than 255, it will be truncated
    to 255.
    Concat is the same if we use plus sign (+). For example :
    st:=concat('ABC','DEF'); is the same as
    st:='ABC'+'DEF';
  7. Insert : Insert a string inside another string from indexth character
    Syntax : insert(source,target,index)
    Example :

    var
    s1, s2 : string;
    begin
    s1:='not ';
    s2:='I do love you';
    insert(s1,s2,6);
    writeln(s2); { I do not love you }
    end.

    If the result string length is more than 255, it will be truncated into 255 as well.
  8. Delete : Deletes n characters from string s starting from index i.
    Syntax : delete(s,i,n);
    If index i is greater than length of s, s is unchanged. If n specifies
    more characters than remain (starting from i), the remainder of the
    string is deleted. Example :

    var
    s : string;
    begin
    s:='I am not responsible for that !';
    delete(s,6,3);
    writeln(s); { I am responsible for that }
    end.

  9. Fillchar : fill string s with character c until s is n-1 char long.
    Syntax : fillchar(s,n,c);
    Beware : s[0] is overrided, so don't forget to add s[0]:=chr(n-1); to
    normalize it.

    var
    s : string;
    begin
    fillchar(s,51,'=');
    s[0]:=chr(50);
    end.

Actually, those procedures or functions can be read from Pascal's help. So, refer to Borland Pascal help if you want working examples. You can even make your own string functions. If you don't understand, e-mail me.

As Borland Pascal 7.0 arrives, we know that C style string is adopted in. In C, we view strings either as an array of characters or a pointer of characters. Pointer will be discussed in second lesson. The main reason is that Pascal can not maintain strings larger than 255. Then a new type of string is employed : PChar, a pointer of character.

Pascal string consists of : one byte for its length then the contents. In PChar, just like C, we don't recognize the length. All we know is when the string stops -- that is when we encounter ASCII 0 (NULL). That null stop style makes the C style of string called NULL TERMINATED STRING.

All string manipulation routines for PChar are adopted from C. If you would like to know each one of it, you should learn C, where it came from. Nevertheless, you could even learn it in Borland Pascal help too.

The details of pointers and this type of string could be found in my second lesson of Pascal.


You could compare two strings just like numbers, too ! Suppose s1 and s2 are strings, you could do like this :

    if s1 < s2 then .... (and so on ...)

That's all for this time.


Where to go ?

Back to main page
Back to Pascal Tutorial Lesson 1 contents
To the quiz
Back to Chapter 7 about arrays
To Chapter 9 about records
My page of programming link
Contact me here


By : Roby Joehanes, © 1996, 2000

Pascal 字符串的更多相关文章

  1. 用结构体解析Pascal字符串

    来源:https://www.cnblogs.com/qiuyuwutong/p/8708844.html 1.什么是柔性数组? 柔性数组既数组大小待定的数组, C语言中结构体的最后一个元素可以是大小 ...

  2. Inno Setup, Pascal 字符串带双引号如何写

    Windows 的路径中如果有空格,就需要用双引号括起来.只能填 ASCII-Code-Number (decimal),不能用一般的 escape 方法. # + path + # 查询这个表的第一 ...

  3. Delphi字符串的基本操作与常用函数

    参考:http://www.cnblogs.com/pchmonster/archive/2011/12/16/2290034.html 结合这个博客一起学习:http://www.cnblogs.c ...

  4. Delphi中的各种字符串、String、PChar、Char数组

    参考博客:http://www.cnblogs.com/pchmonster/archive/2011/12/14/2287686.html 其中的所有代码均在Delphi7下测试通过. Delphi ...

  5. Delphi反汇编内部字符串处理函数/过程不完全列表

    Delphi反汇编内部字符串处理函数/过程不完全列表 名称 参数 返回值 作用 等价形式 / 备注   _PStrCat EAX :目标字符串 EDX :源字符串 EAX 连接两个 Pascal 字符 ...

  6. Delphi反汇编内部字符串处理函数不完全列表

    Delphi反汇编内部字符串处理函数/过程不完全列表 名称 参数 返回值 作用 等价形式 / 备注 _PStrCat EAX :目标字符串 EDX :源字符串 EAX 连接两个 Pascal 字符串 ...

  7. C++字符串之一(字符表示)

    在C++中有两种类型可以用于表示字符,char和wchar_t. 但是字符串格式的标准却有很多种,如ASCII,UTF8,UTF16,UTF32等等.字符串的格式和char/wchar_t 的关系是什 ...

  8. delphi 怎么将一个文件流转换成字符串(String到流,String到文件,相互转化)

    //from   http://kingron.myetang.com/zsfunc0d.htm (*//   标题:充分利用pascal字符串类型   说明:和PChar不同,string可以保存# ...

  9. 关于Delphi中的字符串的浅析(瓢虫大作,里面有内存错误的举例)

    关于Delphi中的字符串的浅析 只是浅浅的解析下,让大家可以快速的理解字符串. 其中的所有代码均在Delphi7下测试通过. Delphi 4,5,6,7中有字符串类型包括了: 短字符串(Short ...

随机推荐

  1. Python——matplotlib基础绘图函数示例

    1. 2.饼图 (1) import matplotlib.pyplot as plt labels='frogs','hogs','dogs','logs'% sizes=[15,30,45,10] ...

  2. CodeForces 277A 红娘问题(并查子集)

    题目链接 思路如下 这题可以普通的并查集来做,我们把每个人认识的红娘,放到一个同一个集合里面,然后通过 for循环 遍历出现过的编号,看总共有几个集合,当集合的个数大于1的时候,需要的话费rmb的数量 ...

  3. 记一次Windb死锁排查

    正在开会,突然线上站点线程数破千.然后一群人现场dump分析. 先看一眼线程运行状态 !eeversion 发现CPU占用并不高,19%,937条线程正在运行. 看看他们都在干什么. ~* e !cl ...

  4. flume客户端模拟数据发送并记录在mysql数据库

    这里只是做了简单的demo,并未深研 1.编写PolluteSink 1.1 maven创建项目(pom.xml) <dependencies> <dependency> &l ...

  5. PTA数据结构与算法题目集(中文) 7-11

    PTA数据结构与算法题目集(中文)  7-11 7-11 关键活动 (30 分)   假定一个工程项目由一组子任务构成,子任务之间有的可以并行执行,有的必须在完成了其它一些子任务后才能执行.“任务调度 ...

  6. 关于selenium定位元素时,出现此问题的处理办法:find_element=wait.until(ec.presence_of_element_locatetd(locator))定位不到页面元素的问题

    最近再用,selenium中的from selenium.webdriver.common.by import By方法时,一直报错如下(图一),各种百度都没有解决,最后只能脱离框架,从最原始的代码开 ...

  7. 适用于小白的 python 快速入门教程

    文章更新于:2020-02-17 按照惯例,需要的文件附上链接放在文首 文件名:python-3.7.6-amd64.exe 文件大小:25.6 M 下载链接:https://www.lanzous. ...

  8. docker-compose容器中redis权限问题

    遇到的问题:aof文件不断变大,导致服务器卡崩溃. 1.在服务器上拉取Bitnami/redis的镜像 2.出现aof权限不够问题,所以直接给aof文件加了权限,导致aof不断变大,最终服务器宕机. ...

  9. 八、路由详细介绍之动态路由OSPF(重点)

    一.OSPF介绍 OSPF优点:无环路.收敛快.扩展性好.支持认证 二.工作原理: 图中RTA.RTB.RTC每个路由器都会生成一个LSA, 通过LSA泛洪进行互相发送相互学习,形成LSDB (链路状 ...

  10. PHP 语法引用使用及实现

    说明 这里基于 php7.2.5 进行测试,php7 之后内部结构变化应该不是太大,但与 php5.X 有差别. 什么是引用 在 PHP 中引用是一种数据类型 (结构),是指 指向同一个类型的数据结构 ...