跳轉到內容

應用程式設計/字串

50% developed
來自華夏公益教科書,開放的書籍,為開放的世界

字串函式

[編輯 | 編輯原始碼]

字串函式用於計算機程式語言中操作字串或查詢有關字串的資訊(有些兩者都做)。

大多數具有字串資料型別的程式語言都將具有一些字串函式,儘管每種語言中可能還有其他低階方法可以直接處理字串。在面向物件的語言中,字串函式通常作為字串物件的屬性和方法實現。在函式式和基於列表的語言中,字串表示為列表(字元程式碼),因此所有列表操作過程都可以被認為是字串函式。但是,此類語言也可能實現一個明確的字串特定函式子集。

對於操作字串的函式,現代面向物件的語言,如 C# 和 Java 具有不可變字串並返回副本(在新建的動態記憶體中分配),而其他語言,如 C 操作原始字串,除非程式設計師將資料複製到新的字串。例如,參見下面的連線

字串函式的最基本示例是length(string)函式。此函式返回字面量字串的長度。

例如,length("hello world")將返回 11。

其他語言可能具有語法或引數或結果類似或完全相同的字串函式。例如,在許多語言中,長度函式通常表示為len(string)


字串資料型別

[編輯 | 編輯原始碼]

字面量字串

[編輯 | 編輯原始碼]

非文字字串

[編輯 | 編輯原始碼]

字串處理演算法

[編輯 | 編輯原始碼]

遊程編碼

[編輯 | 編輯原始碼]

遊程編碼 (RLE) 是一種無損資料壓縮形式,其中資料執行(相同資料值在許多連續資料元素中出現的序列)儲存為單個數據值和計數,而不是作為原始執行。這在包含許多此類執行的資料上最為有用。例如,考慮簡單的圖形影像,例如圖示、線圖、康威的生命遊戲和動畫。對於沒有許多執行的檔案,它沒有用,因為它可能會大大增加檔案大小。

RLE 也可用於指代 CompuServe 支援的早期圖形檔案格式,用於壓縮黑白影像,但已被他們後來的圖形交換格式 (GIF) 廣泛取代。RLE 還指代 Windows 3.x 中很少使用的影像格式,副檔名為 rle,它是一種執行長度編碼點陣圖,用於壓縮 Windows 3.x 啟動螢幕。

示例

例如,考慮一個包含純黑色文字和純白色背景的螢幕。空白處將有許多白色的畫素長執行,而文字中將有許多黑色的畫素短執行。假設掃描線,B 表示黑色畫素,W 表示白色,可能如下所示

   WWWWWWWWWWWWBWWWWWWWWWWWWBBBWWWWWWWWWWWWWWWWWWWWWWWWBWWWWWWWWWWWWWW 

將執行長度編碼 (RLE) 資料壓縮演算法應用於上述假設掃描線,它可以呈現如下

   12W1B12W3B24W1B14W 

這可以解釋為十二個 W 的序列、一個 B、十二個 W、三個 B 等,

執行長度程式碼用僅 18 個字元表示了原始的 67 個字元。雖然影像儲存實際使用的格式通常是二進位制,而不是像這樣使用 ASCII 字元,但原理保持不變。即使是二進位制資料檔案也可以使用這種方法進行壓縮;檔案格式規範通常將重複的位元組在檔案中定義為填充空間。但是,DEFLATE 等更新的壓縮方法通常使用基於 LZ77 的演算法,這是執行長度編碼的推廣,可以利用字串的執行(例如 BWWBWWBWWBWW)。

執行長度編碼可以用多種方式表達,以適應資料屬性以及其他壓縮演算法。例如,一種流行的方法只對兩個或多個字元的執行進行編碼,使用“轉義”符號來標識執行,或者使用字元本身作為轉義,這樣每當一個字元出現兩次時就表示一個執行。在前面的示例中,這將給出以下結果

   WW12BWW12BB3WW24BWW14

這將被解釋為十二個 W 的執行、一個 B、十二個 W 的執行、三個 B 的執行等。在執行不太頻繁的資料中,這可以顯著提高壓縮率。

另一個問題是其他壓縮演算法的應用。即使提取了執行,不同字元的頻率也可能很大,從而可以進一步壓縮;但是,如果執行長度在檔案中以執行發生的 location 寫入,則這些數字的存在會中斷正常流程,並使壓縮變得更加困難。為了克服這一點,一些執行長度編碼器將資料和轉義符號與執行長度分開,以便這兩個可以獨立處理。對於示例資料,這將產生兩個輸出,字串“WWBWWBBWWBWW”和數字(12,12,3,24,14)。

轉義序列

[編輯 | 編輯原始碼]

什麼是它?

[編輯 | 編輯原始碼]

程式設計師將“反斜槓 (\)”字元稱為跳脫字元。換句話說,當我們在字串中使用它時,它具有特殊含義。顧名思義,跳脫字元會短暫地跳脫字元串中的字元,以引入獨特的包含。也就是說;反斜槓表示它後面的下一個字元具有不同的含義。[1]

Python 中的示例

[編輯 | 編輯原始碼]

[2] [3]

單引號

string = 'That\'s my bag.'
print(string)

輸出

That's my bag.

此示例使用 (\') 在字串中列印單引號。

雙引號

 string = "\"Python\""
 print(string)

輸出

"Python"

此示例使用 (\") 刪除反斜槓並將引號放入字串中。

換行符

 string = 'applied \nprogramming'
 print(string)

輸出

applied
programming

換行符用於在新的獨立行中寫入單詞。

反斜槓

 string = 'applied\\ programming'
 print(string)

輸出

applied\ programming

此示例列印單個反斜槓。

空格

 string = 'applied\tprogramming'
 print(string)

輸出

applied programming

此示例在單詞之間新增空格。

退格鍵

 string = 'applied \bprogramming'
 print(string)

輸出

appliedprogramming

此示例使用 "\b" 刪除單詞之間的空格。

十六進位制值

 string = "\x50\x59\x54\x48\x4f\x4E"
 print(string)

輸出

PYTHON

此示例使用 \xhh 將十六進位制值轉換為字串。

 string = "Nancy said \x22Hello World!\x22 to the crowd."
 print(string)

輸出

Nancy said "Hello World!" to the crowd.

此示例使用 "\x" 表示接下來的兩個字元是十六進位制數字,“22”是十六進位制中雙引號的 ASCII 值。

八進位制值

 string = "\120\131\124\110\117\116"
 print(string)

輸出

PYTHON

此示例使用 \ooo 將八進位制值轉換為普通字串。

關鍵術語

[編輯 | 編輯原始碼]

連線 - 連線兩個字元字串。也稱為“連線”。

控制字元 - 用於執行操作,而不是在螢幕上顯示可列印字元。易於理解的示例包括“Escape”、“Backspace”和“Delete”。[4]

轉義序列 - 一組字元,其含義不同於其中包含的文字字元。[5]

固定長度字串 - 長度預先確定且固定不變的字串。

迭代 - 重複一個過程以生成結果。[6]

字首 - 如果字串 A = a1, a2, …an 滿足 m ≤ n,則 A 的字首 Â = a1, a2, … am。字串 A 的真字首與其本身不相同(0 ≤ m < n)。[7]

遊程編碼 (RLE) - 一種資料壓縮形式,其中輸入為資料流(例如“AAABBCCCC”),輸出為一行連續資料值的計數序列(例如“3A2B4C”)。[8]

字串 - 通常用引號括起來的字元陣列。

字串字面量 - 程式設計中用於在計算機程式原始碼中表示字串值的一種字面量型別。[9]

子字串 - 當一個字串是原始字串字尾的字首,反之亦然,就會發生這種情況。[7]

字尾 - 包含原始字串最後一個字母的原始字串的任何子字串,包括它本身。字串的真字尾不等於/與原始字串本身相同。[7]

可變長度字串 - 長度可以變化的字串,通常由使用者輸入決定。

參考資料

[編輯 | 編輯原始碼]
華夏公益教科書