くし

本页使用了标题或全文手工转换
维基百科ひゃっか自由じゆうてき百科ひゃっかぜん

くし英語えいごstring),よしれい个或组成てき有限ゆうげん序列じょれつ一般いっぱん记为)。它是编程语言ちゅう表示ひょうじぶんほんてきかずすえ类型

通常つうじょう以串てき整体せいたいさく操作そうさ对象,如:ざいくしちゅう查找ぼう个子くしもとめいち个子くしざいくしてきぼう位置いちじょう插入そうにゅう一个子串以及删除一个子串等。两个くし相等そうとうてきたかしよう条件じょうけん:长度相等そうとう,并且かく个对应位置いちじょうてき相等そうとう。设p、q两个くしもとむqざいpちゅうくび现的位置いちてき运算さけべ做模しきひきはいくしてき两种さい基本きほんてきそん储方しき顺序そん储方しき链接そん储方しき

形式けいしき[编辑]

Σしぐまさけべ字母じぼひょうてきそら有限ゆうげん集合しゅうごうΣしぐまてき元素げんそさけべ做“符号ふごうある”。ざいΣしぐまうえてきくしあるΣてきにんなん有限ゆうげん序列じょれつ[1]れい如,如果Σしぐま = {0, 1},则0101ざいΣしぐまうえてきくし

くしてき长度ざいくしちゅうてきすうもく序列じょれつてき长度),它可以是にんなに负整すう。“そらくしざいΣしぐまうえてきただ一的长度为0てきくし,并被指示しじεいぷしろんあるλらむだ[1][2]

ざいΣしぐまうえてき所有しょゆう长度为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,…})ざいΣしぐまうえてき形式けいしき语言。

くしせっ和子わこくし[编辑]

くしせっ”(英語えいごconcatenationΣしぐま*うえてき重要じゅうよう二元にげん运算。对于Σしぐま*ちゅうてき两个くしst,它们てきくしせってい义为ざいsなかてき序列じょれつきさき跟随tなかてき序列じょれつ,并被指示しじstれい如,Σしぐま = {a, b,…, z},并且s = beart = hug,则st = bearhugts = hugbear

くしくしせっ结合せいてきただし交换せい运算。そらくし充当じゅうとう单位もと;对于にんなんくしsゆうεいぷしろんs = sεいぷしろん = s所以ゆえん集合しゅうごうΣしぐま*かずくしせっ运算形成けいせいりょう幺半ぐん,就是从Σしぐま生成せいせいてき自由じゆう幺半ぐん。此外,长度函数かんすうてい义了いち个从Σしぐま*いた负整すうてき幺半ぐんどう

くしsしょう为是くしtてきくし”(英語えいごsubstringある因子いんし”(英語えいごfactor),如果存在そんざい可能かのう为空)くしuv使つかいとくt = usv。“其子くし关系てい义了ざいΣしぐま*うえてきへんじょ,其最小さいしょうもとそらくし

词典はいじょ[编辑]

经常需要じゅようてい义在くし集合しゅうごうじょうてき次序じじょ。如果ひょうΣしぐまゆういちぜんじょ(cf. 字母じぼじょ),则可以定义在Σしぐま*うえてきさけべ词典じょてきぜんじょ注意ちゅういいんΣしぐま有限ゆうげんてき,总是以定义在Σしぐま继而ざいΣしぐま*うえてき良好りょうこう次序じじょれい如,如果Σしぐま = {0, 1}并且0 < 1,则Σしぐま*てき词典次序じじょεいぷしろん < 0 < 00 < 000 <…< 011 < 0110 <…< 01111 <…< 1 < 10 < 100 <…< 101 <…< 111…

くし运算[编辑]

ざい形式けいしき论中经常现一些在字符串上的额外运算。它们ざい条目じょうもくくし运算ちゅう给出。

くしすうすえ类型[编辑]

くしすうすえ类型けんざい形式けいしきくしてきそうほうじょうてきかずすえ类型Data type)。くし几乎ざい所有しょゆう编程语言ちゅう以实现的非常ひじょう重要じゅうよう有用ゆうようてきすうすえ类型。ざいぼう些语ごとちゅう它们さく基本きほん类型获得,ざい另一些语言中做为复合类型获得。多数たすうだか级语げんてき语法まこと许用ぼう种方しき引用いんようおこりらいてきくしらい表示ひょうじくしすうすえ类型てき实例;这种もとくしさけべ做“つね值”(英語えいごliteralあるくしつね”(英語えいごstring literal)。

くし长度[编辑]

つきかん形式けいしきくし以有任意にんいただし有限ゆうげんてき长度,实际语言てきくしてき长度经常きりせいいた一个人工极大值。一般いっぱんてき说,ゆう两种类型てきくしすうすえ类型:“てい长字くし”,它有固定こていてき极大长度并且かん达到りょう这个极大值都使用しようどう样数量的りょうてきないそん“变长くし”,它的长度专断固定こていてき并且依赖于实际てき大小だいしょう使用しよう变数量的りょうてきないそんざい现代编程语言なかてき多数たすうくし变长くしつきかんさけべ这个名字みょうじ所有しょゆう变长くし还是ざい长度じょうゆう个极げん,一般的说这个极限只依赖于可获得的内存的数量。

编码[编辑]

历史じょうくしすうすえ类型为每个字分配ぶんぱいいちつきかんせい确的しゅうずい区域くいき而改变,编码あし够类とくほどじょ员可以忽りゃく它—どういち个系统在不同ふどうてき区域くいきちゅう使用しようてきしゅう组要么让一个字符在同样位置,よう么根ほん就没ゆう它。这些しゅう典型てんけいてきもとASCII码或EBCDIC码。

おん文字もじてき语言汉语にちあさ鲜语ごうしょうCJKてき合理ごうり表示ひょうじ需要じゅよう于256个字まい一个字节编码的极限)。つね规的かい决涉及:保持ほじASCII码的单字节表示ひょうじ,并使用しようそう节来表示ひょうじCJK字形じけい。现存だい码在よういた它们かい导致一些字符串匹配和切断上的问题,严重程度ていど赖于编码如何いか设计てき

  1. ぼう些编码比如EUC家族かぞく证在ASCII码范围内てき节值ただ表示ひょうじASCII使つかいとく使用しよう这些さく为字だんぶんへだたてきけい统得いた编码安全あんぜん。其他编码如ISO-2022Shift-JIS做这种担保たんぽ使つかいとくもと于字节的だい码做てきひきはい安全あんぜん
  2. 另一个问题是如果一个字符串的开头被删除了,对解码器てき重要じゅうよう指示しじある关于ざい序列じょれつちゅうてき位置いちてきしんいき可能かのう就丢しつりょう
  3. 另一个问题是如果字符串被连接到一起(とく别是ざい不知ふちどう这个编码てきだい截断せつだんりょう它们てき结尾きさき),だいいち个字くし可能かのう不能ふのう导致编码进入适合处理だい二个字符串的状态中。

Unicode也有やゆう些复杂的问题。多数たすう语言ゆうUnicodeくしすうすえ类型(通常つうじょうUTF-16いん为它ざいUnicode补充めん介入かいにゅうぜん就被增加ぞうかりょう)。ざいUnicode和本わほん编码间转换要求ようきゅう理解りかい本地ほんじ编码,这对于现そんけい统要いちおこり传输かく种编码的くし而又ぼつゆう实际标记它们ようりょう什么编码就是个问题。

实现[编辑]

ぼう些语げんC++くし实现为可以用于任なに基本きほん类型てきばんただし这是个例がい而不规则。

ざい一个面向对象语言把字符串表示为对象的情况下,如果值可以在运行变更,则叫做“变的”(mutable),如果值在建立こんりゅうきさき不可ふか变更りょう,则叫做“变的”(immutable)。れい如,Ruby有可ゆか变字くし,而Pythonてきくし不可ふか变的。

其他语言,さい著名ちょめいてきゆうPrologErlang,避免实现くしすうすえ类型,转而さいようくし表示ひょうじ为字だい码的れつひょうてき约定。

表示法ひょうじほう[编辑]

一种常用的表示法是使用一个だいてきかずまい个字うらないよういち个字节(如在ASCIIだい码中)ある两个节(如在unicodeなか)。它的长度使用しよういち个结たば一般いっぱんNUL,ASCIIだい码是0,ざいC编程语言ちゅう使用しよう这种方法ほうほう)。[3]あるものざい前面ぜんめん加入かにゅういち整数せいすう值来表示ひょうじ它的长度(ざいPascal语言ちゅう使用しよう这种方法ほうほう)。

这是いち个用NUL结束てきくしてきれい,它用10个byteそん储,ようASCII表示法ひょうじほう

F R A N K NUL k e f w
46 52 41 4E 4B 00 6B 66 66 77

上面うわつらてきくしてき长度为5个字ただし注意ちゅうい它占よう6个字节。结束きさきてきぼつゆうにんなん义。

这是しょうどうてきPascalくし

length F R A N K k e f w
05 46 52 41 4E 4B 6B 66 66 77

当然とうぜん可能かのう还有其它てき表示法ひょうじほう使用しようれつひょう以使とくいち些字くし操作そうさ(如插入そうにゅう删除)さらだかこう

くし实用ほどじょ[编辑]

一些编程语言设计为编写字符串处理程序更容易编写。这是いち些例

很多UNIX实用ほどじょ进行简单てきくし处理,并能よう于简单地编写一些强大的字符串处理算法。ぶんけん有限ゆうげんりゅう以像くしいち样查

いち些新てき编程语言包括ほうかつPerlPythonRubyじょせい则表达式らい帮助文字もじ处理。

算法さんぽう[编辑]

这是一些字符串处理算法さんぽうざいくしじょう进行不同ふどうてき处理:

まいり[编辑]

参考さんこう资料[编辑]

  1. ^ 1.0 1.1 Barbara H. Partee; Alice ter Meulen; Robert E. Wall. Mathematical Methods in Linguistics. Kluwer. 1990. 
  2. ^ John E. Hopcroft, Jeffrey D. Ullman. Introduction to Automata Theory, Languages, and Computation. Addison-Wesley. 1979. ISBN 0-201-02988-X.  Here: sect.1.1, p.1
  3. ^ Bryant, Randal E.; David, O'Hallaron, Computer Systems: A Programmer's Perspective 2003, Upper Saddle River, NJ: Pearson Education: 40, 2003 [2019-04-15], ISBN 0-13-034074-X, (原始げんし内容ないようそん档于2007-08-06)