有限長度串

有限長度串

計算機上的非數值處理的對象基本上是字元串數據 。串(字元串)(string)是由零個或多個字元組成的有限序列,一般記為s=’a1a2…an’(n≥0),其中s是串的名,用單引號括起來的字元序列是串的值;a可以是字母,數字或其他字元;串中字元的數目n稱為串的長度。有限長度串是指串(字元串)的長度是有限的。

簡介

一串鄰接的字元就組成字元串。在程式設計語言中構成字和各種標識符。如程式名、各種定義符、各種控制命令等。可以用在BASIC語言的注釋語句中對程式予以註解,或其他語言的注釋部分。字元串也可以作為字元數據,接受計算機系統的處理 。在配有適當軟體的微機上,漢字也可作為字元進行處理。簡單的圖形也能定義為特殊的字元或字元串。有限長度串是指串(字元串)的長度是有限的。其中有限是十分重要的,有限長度串在很多方面都有套用。如,在資料庫中,定義字元數據長度時,一般要確定字元數據長度。在形式語言理論中,有限長度串也有重要套用。

形式理論

形式語言理論是用數學方法研究自然語言(如英語)和人工語言(如程式設計語言)的語法的理論。它只研究語言的組成規則,不研究語言的含義。形式語言理論在自然語言的理解和翻譯、計算機語言的描述和編譯、社會和自然現象的模擬等方面有廣泛的套用。在形式語言理論中,在構造有關形式文法和自動機過程中,會用到有限長度串,常見形式如下。

設 Σ 是叫做字母表的非空有限集合。Σ 的元素叫做“符號”或“字元”。在 Σ 上的字元串(或字)是來自 Σ 的任何有限序列。例如,如果 Σ = {0, 1},則 0101 是在 Σ 之上的字元串。

字元串的長度是在字元串中字元的數目(序列的長度),它可以是任何非負整數。“空串”是在 Σ 上的唯一的長度為 0 的字元串,並被指示為 ε 或 λ。

在 Σ 上的所有長度為 n 的字元串的集合指示為 Σn。例如,如果 Σ = {0, 1} 則 Σ2 = {00, 01, 10, 11}。注意 Σ0 = {ε} 對於任何字母表 Σ。

在 Σ 上的所有任何長度的字元串的集合是 Σ 的Kleene閉包並被指示為 Σ*。 例如,如果 Σ = {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, …})是在 Σ 上的形式語言。

字元串分析

字元串分析是用於判定軟體程式中給定字元串變數(一般稱為熱點變數)的某些性質的程式分析。與針對數值變數的程式分析相比,字元串分析必須處理字元串變數的兩個特性:

首先,字元串變數的值域與數值變數不同:數值變數的值域是一個數值集合,通常可以表示為數軸上若干個離散的點或連續區間;而字元串變數的值域是一個字元串集合,需要一個形式化的符號系統(例如正則語言)準確地描述這一字元串集合;

其次,字元串變數上定義的操作(拼接、字元替換等)與數值變數上的操作不同,因此需要準確地確定這些操作會對字元串變數上所關注的性質產生怎樣的影響,即對於這些字元串操作,已知運算元的性質,如何確定操作結果的性質。

對字元串變數這兩個特性的處理,即字元串變數值域的抽象表示和字元串操作的處理方式是字元串分析與傳統的針對數值變數的程式分析的主要區別。

函式套用

1. 連線運算 concat(s1,s2,s3…sn) 相當於s1+s2+s3+…+sn。

例:concat(‘11’,'aa’)="11aa’;

2. 求子串。 Copy(s,I,I) 從字元串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

在ASP中 求字元串長度用 len(s)例: len("abc12")=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

相關詞條

熱門詞條

聯絡我們