字符串
贡献者:xqh0813 浏览:1793次 创建时间:2009-08-30
-
符串或串(String)是由零个或多个字符组成的有限序列。一般记为s='a1a2???an'(n>=0)。它是编程语言中表示文本的数据类型。
通常以串的整体作为操作对象,如:在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。设p、q是两个串,求q在p中首次出现的位置的运算叫做模式匹配。串的两种最基本的存储方式是顺序存储方式和链接存储方式。
字符串-简介
字符串或串(String)是由零个或多个字符组成的有限序列。一般记为 s='a1a2???an'(n>=0)。它是编程语言中表示文本的数据类型。
通常以串的整体作为操作对象,如:在串中查找某个子串、求取一个子串、在串的某个位置上插入一个子串以及删除一个子串等。两个字符串相等的充要条件是:长度相等,并且各个对应位置上的字符都相等。设p、q是两个串,求q在p中首次出现的位置的运算叫做模式匹配。串的两种最基本的存储方式是顺序存储方式和链接存储方式。
“字符串(Trojan.String.a)”病毒:警惕程度★★★,木马病毒,通过网络传播,依赖系统: WIN9X/NT/2000/XP。
该病毒通过网络传播,进入用户电脑后就隐藏在系统目录和内存中,病毒发作时会给用户电脑造成以下破坏:屏幕为空、无端打开CD驱动器、进行洪水攻击、打开黄色网站等,用户要小心防毒。
字符串-字符串函数
1.连接运算concat(s1,s2,s3…sn)相当于s1 s2 s3 … sn.
例:concat(‘11’,’aa’)=’11aa’;
2.求子串。Copy(s,I,L)从字符串s中截取第I个字符开始后的长度为l的子串。
例:copy(‘abdag’,2,3)=’bda’
3.删除子串。过程Delete(s,I,l)从字符串s中删除第I个字符开始后的长度为l的子串。
例:s:=’abcde’;delete(s,2,3);结果s:=’ae’
4.插入子串。过程Insert(s1,s2,I)把s1插入到s2的第I个位置
例:s:=abc;insert(‘12’,s,2);结果s:=’a12bc’
5.求字符串长度length(s)例:length(‘12abc’)=5
6.搜索子串的位置pos(s1,s2)如果s1是s2的子串,则返回s1的第一个字符在s2中的位置,若不是子串,则返回0.
例:pos(‘ab’,’12abcd’)=3
7.字符的大写转换。Upcase(ch)求字符ch的大写体。
例:upcase(‘a’)=’A’
8.数值转换为数串。过程Str(x,s)把数值x化为数串s.
例:str(12345,s);结果s=’12345’
9.数串转换为数值。过程val(s,x,I)把数串s转化为数值x,如果成功则I=0,不成功则I为无效字符的序数
例:val(‘1234’,x,I);结果x:=1234
字符串-“字符串”病毒
“字符串(Trojan.String.a)”病毒:警惕程度★★★,木马病毒,通过网络传播,依赖系统:WIN9X/NT/2000/XP。
该病毒通过网络传播,进入用户电脑后就隐藏在系统目录和内存中,病毒发作时会给用户电脑造成以下破坏:屏幕为空、无端打开CD驱动器、进行洪水攻击、打开黄色网站等,用户要小心防毒。
字符串-形式理论
设Σ是叫做字母表的非空有限集合。Σ的元素叫做“符号”或“字符”。在Σ上的字符串(或字)是来自Σ的任何有限序列。例如,如果Σ={0,1},则0101是在Σ之上的字符串。
字符串的长度是在字符串中字符的数目(序列的长度),它可以是任何非负整数。“空串”是在Σ上的唯一的长度为0的字符串,并被指示为ε或λ。
在Σ上的所有长度为n的字符串的集合指示为Σn。例如,如果Σ={0,1}则Σ2={00,01,10,11}。注意Σ0={ε}对于任何字母表Σ。
在Σ上的所有任何长度的字符串的集合是Σ的Kleene闭包并被指示为Σ*。依据Σn,。例如,如果Σ={0,1}则Σ*={ε,0,1,00,01,10,11,000,001,010,011,…}。尽管Σ*自身是可数无限的,Σ*的所有元素都有有限长度。
在Σ上一个字符串的集合(就是Σ*的任何子集)被称为在Σ上的形式语言。例如,如果Σ={0,1},则带有偶数个零的字符串的集合({ε,1,00,11,001,010,100,111,0000,0011,0101,0110,1001,1010,1100,1111,…})是在Σ上的形式语言。
字符串-串接和子串
“串接”是Σ*上的重要二元运算。对于Σ*中的两个字符串s和t,它们的串接被定义为在s中的字符序列之后跟随着t中的字符序列,并被指示为st。例如,Σ={a,b,…,z},并且s=bear且t=hug,则st=bearhug而ts=hugbear。
字符串串接是结合性的,但非交换性运算。空串充当单位;对于任何字符串s,有εs=sε=s。所以,集合Σ*和串接运算形成了幺半群,就是从Σ生成的自由幺半群。此外,长度函数定义从Σ*到非负整数的幺半群同态。
字符串s被称为是字符串t的“子串”或“因子”,如果存在(可能为空)字符串u和v使得t=usv。“是其子串”关系定义了在Σ*上的偏序,其最小元是空串。
字符串-词典排序
经常需要定义在字符串集合上的次序。如果字符表Σ有一个全序(cf.字母序),则可以定义在Σ*上的叫做词典序的全序。注意因为Σ是有限的,总是可以定义在Σ继而在Σ*上的良好次序。例如,如果Σ={0,1}并且0<1,则Σ*的词典次序是ε<0<00<000<…<011<0110<…<01111<…<1<10<100<…<101<…<111…
字符串-字符串数据类型
字符串数据类型是建模在形式字符串的想法上的数据类型。字符串是几乎在所有编程语言中可以实现的非常重要和有用的数据类型。在某些语言中它们可作为基本类型获得,在另一些语言中做为复合类型获得。多数高级语言的语法允许通常用某种方式引用起来的字符串来表示字符串数据类型的实例;这种元字符串叫做“文本”或“字符串文本”。
字符串-字符串长度
尽管形式字符串可以有任意(但有限)的长度,实际语言的字符串的长度经常被限制到一个人工极大值。一般的说,有两种类型的字符串数据类型:“定长字符串”,它有固定的极大长度并且不管是否达到了这个极大值都使用同样数量的内存;和“变长字符串”,它的长度不是专断固定的并且依赖于实际的大小使用可变数量的内存。在现代编程语言中的多数字符串是变长字符串。尽管叫这个名字,所有变长字符串还是在长度上有个极限,一般的说这个极限只依赖于可获得的内存的数量。
字符串-字符编码
历史上,字符串数据类型为每个字符分配一个字节,尽管精确的字符集随着区域而改变,字符编码足够类似得程序员可以忽略它—同一个系统在不同的区域中使用的字符集组要么让一个字符在同样位置,要么根本就没有它。这些字符集典型的基于ASCII码或EBCDIC码。
意音文本的语言比如汉语、日语和朝鲜语(合称为CJK)的合理表示需要多于256个字符(每字符一个字节编码的极限)。常规的解决涉及保持对ASCII码的单字节表示并使用双字节来表示CJK字形。现存代码在用到它们会导致一些字符串匹配和切断上的问题,严重程度依赖于字符编码是如何设计的。某些编码比如EUC家族保证在ASCII码范围内的字节值只表示ASCII字符,使得使用这些字符作为字段分隔符的系统得到编码安全。其他编码如ISO-2022和Shift-JIS不做这种担保,使得基于字节的代码做的匹配不安全。另一个问题是如果一个字符串的开头被删除了,对解码器的重要指示或关于在多字节序列中的位置的信息可能就丢失了。另一个问题是如果字符串被连接到一起(特别是在被不知道这个编码的代码截断了它们的结尾之后),第一个字符串可能不能导致编码器进入适合处理第二个字符串的状态中。
Unicode也有些复杂的问题。多数语言有Unicode字符串数据类型(通常是UTF-16,因为它在Unicode补充位面介入之前就被增加了)。在Unicode和本地编码之间转换要求理解本地编码,这对于现存系统要一起传输各种编码的字符串而又没有实际标记出它们用了什么编码就是个问题。
开放分类
参考资料
贡献者
本词条在以下词条中被提及:
关于本词条的评论共:(0条)