因為字串是字元所構成的陣列,字串之間在比較時是將每個字元分開來進行的,例如:
GNU = "GNU’s Not UNIX"; spaces = (GNU == " ")
輸出為
spaces = 0 0 0 0 0 0 1 0 0 0 1 0 0 0 0
若要判斷兩個字串是否相等,可以使用 strcmp() 函數,此函數會比較兩個字串是否完全相等,strncmp() 函數可以比較兩個字串的前 n 個字元是否相等,另外 strcmpi() 與 strncmpi() 的功能也類似,但這兩個函數會將大小寫的字元是為相等(case-insensitive)。
strcmp (s1, s2)
strcmp(s1, s2) 函數會判斷字串 s1 與 s2 是否完全相等,若相等則傳回 1,否則傳回 0。若 s1 或 s2 其中有一個是字串的巢狀陣列,則會傳回相同長度的陣列,而陣列中包含巢狀陣列中各個字串比對的結果,而另外一個參數可以是字串的巢狀陣列(相同長度或是長度為 1)、字元矩陣或字串。例如:
strcmp("abc", "abc")
輸出為
ans = 1
strcmp("abc", {"abc", "def"})
輸出為
ans = 1 0
strcmp({"abc", "def", "123"}, {"abc", "def", "ABC"})
輸出為
ans = 1 1 0
strcmp() 在比對結果相同時傳回 1,不同時傳回 0,這與 C 語言中的習慣剛好相反。strncmp (s1, s2, n)
strncmp(s1, s2, n) 函數與 strncmp(s1, s2) 函數類似,但只比較字串 s1 與 s2 的前 n 個字元是否相等,若相等則傳回 1,否則傳回 0,例如:
strncmp("abcd", "abce", 3)
輸出為
ans = 1
若 s1 或 s2 其中有一個是字串的巢狀陣列,則會傳回相同長度的陣列,而陣列中包含巢狀陣列中各個字串比對的結果,而另外一個參數可以是字串的巢狀陣列(相同長度或是長度為 1)、字元矩陣或字串。例如:
strncmp("abc", {"abc", "abd"}, 2)
輸出為
ans = 1 1
strncmp({"abc", "def", "123"}, {"abc", "dec", "243"}, 2)
輸出為
ans = 1 1 0
strcmpi (s1, s2)
strcmpi() 函數與 strcmp() 函數類似,但比對字串時不分大小寫。
strncmpi (s1, s2, n)
strncmpi() 函數與 strncmp() 函數類似,但比對字串時不分大小寫。
validstr = validatestring (str, strarray) validstr = validatestring (str, strarray, funcname) validstr = validatestring (str, strarray, funcname, varname) validstr = validatestring (..., position)
validatestring(str, strarray) 函數用來檢查字串 str 是否符合 strarray 所指定的格式:此函數會檢查字串 str 是否等於 strarray 中的任意一個字串,或是其子字串(substring),str 是要比對的字串,strarray 是字串所構成的巢狀陣列。檢查結果若是 str 符合 strarray 所指定的格式,則將結果傳回(即 validstr),若不符合則產生錯誤訊息。例如:
validatestring("abc", {"abc", "12345", "string"})
輸出為
ans = abc
若在比對時發現只有某一個字串的開頭符合,則 Octave 會自動將 strarray 中完整的字串傳回:
validatestring("abc", {"abcdef", "12345", "string"})
輸出為
ans = abcdef