Octave 中的字串是指一連串使用單引號('
)或是雙引號("
)包起來的字元,字串的長度沒有特別的限制。例如:
"string 1" 'string 2'
在 Octave 中,單引號也用在矩陣的轉置運算上,而雙引號並沒有別的功能,因此為了避免混淆,建議盡量使用雙引號表示字串。
使用類似定義陣列的方式可以將多個字串連接起來,例如:
["foo", "bar", "baz"]
這會得到一個連接起來的字串 "foobarbaz"
。
在雙引號的字串中,可以使用反斜線來表示一些特殊的字元,這樣的表示法統稱跳脫序列,例如 “\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
在 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
自動補齊字串也顯示出字元陣列的限制,一個字元陣列無法表示多個不同長度的字串,若需要表示不同長度的字串,可以使用字串的巢狀陣列,請參考資料容器。