表示字串(Represent String)

Octave 中的字串是指一連串使用單引號(')或是雙引號(")包起來的字元,字串的長度沒有特別的限制。例如:

"string 1"
'string 2'

在 Octave 中,單引號也用在矩陣的轉置運算上,而雙引號並沒有別的功能,因此為了避免混淆,建議盡量使用雙引號表示字串。

使用類似定義陣列的方式可以將多個字串連接起來,例如:

["foo", "bar", "baz"]

這會得到一個連接起來的字串 "foobarbaz"

跳脫序列(Escape Sequences)

在雙引號的字串中,可以使用反斜線來表示一些特殊的字元,這樣的表示法統稱跳脫序列,例如 “\n” 表示換行字元,\” 則表示雙引號。在單引號的字串中,反斜線不具任何特殊意義,以下示範雙引號與單引號的差異:

toascii("\n")

輸出為

ans =  10
toascii('\n')

輸出為

ans =

    92   110

以下是可以在雙引號中使用的跳脫序列,這些與 C 語言中所支援的跳脫序列相同:

  • \\:反斜線(\)。
  • \":雙引號(")。
  • \':單引號(')。
  • \0:null 字元,Ctrl + @,ASCII 碼為 0。
  • \a:alert 字元,Ctrl + g,ASCII 碼為 7。
  • \b:backspace 字元,Ctrl + h,ASCII 碼為 8。
  • \f:formfeed 字元,Ctrl + l,ASCII 碼為 12。
  • \n:newline 字元,也就是換行,Ctrl + j,ASCII 碼為 10。
  • \r:return 字元,Ctrl + m,ASCII 碼為 13。
  • \t:horizontal tab 字元,Ctrl + i,ASCII 碼為 9。
  • \v:vertical tab 字元,Ctrl + k,ASCII 碼為 11。

在單引號中唯一的跳脫序列就是單引號,要輸入連續兩個單引號可以代表一個單引號,例如:

'I can''t escape'

輸出為

ans = I can't escape

字元陣列(Character Arrays)

在 Octave 中的字串事實上使以陣列的方式儲存,例如 "ddddd" 這個字串在 Octave 內部是一個長度為 5 的列向量,而向量中的每個元素值皆為 100(100 是字元 d 的 ASCII 碼),由於這特性使得字串可以擴充為字元矩陣,使用字元矩陣可以表示多個長相同的字串,Octave 習慣上將每個列(row)視為一個字串,但將每個行(column)視為一個字串也是可行的。

要建立字元矩陣最簡單的方式是將多個字串直接放進矩陣中,例如:

collection = ["String #1"; "String #2"]

這樣會產生 2 乘 9 的字元矩陣。

要判斷一個矩陣是否為字元矩陣,可以使用 ischar() 函數:

ischar (a)

判斷 a 是否為字元矩陣,是則傳回 1,否則傳回 0

而要判斷一個變數是否為字串(非字元矩陣),可以使用 ischar() 函數配合 isvector() 函數,例如:

ischar(collection)

輸出為

ans = 1
ischar(collection) && isvector(collection)

輸出為

ans = 0
ischar("my string") && isvector("my string")

輸出為

ans = 1

當使用不同長度的字串產生字元矩陣時,Octave 會將較短的字串自動加上空白字元補齊,使每個字串長度都跟最長的字串長度相等,而自動加入的字元除了空白之外,亦可以使用 string_fill_char() 函數設定:

val = string_fill_char ()
old_val = string_fill_char (new_val)

查詢或設定在建立字元陣列時,用來補齊的字元,這個值必須是單一個字元,預設是空白(" ")。例如:

old_fc = string_fill_char ("X");
[ "these"; "are"; "strings" ]
string_fill_char(old_fc);

輸出為

ans =

theseXX
areXXXX
strings

自動補齊字串也顯示出字元陣列的限制,一個字元陣列無法表示多個不同長度的字串,若需要表示不同長度的字串,可以使用字串的巢狀陣列,請參考資料容器。