字串比較(Comparing Strings)

因為字串是字元所構成的陣列,字串之間在比較時是將每個字元分開來進行的,例如:

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) 函數會判斷字串 s1s2 是否完全相等,若相等則傳回 1,否則傳回 0。若 s1s2 其中有一個是字串的巢狀陣列,則會傳回相同長度的陣列,而陣列中包含巢狀陣列中各個字串比對的結果,而另外一個參數可以是字串的巢狀陣列(相同長度或是長度為 1)、字元矩陣或字串。例如:

strcmp("abc", "abc")

輸出為

ans =  1
strcmp("abc", {"abc", "def"})

輸出為

ans =

   1   0
strcmp({"abc", "def", "123"}, {"abc", "def", "ABC"})

輸出為

ans =

   1   1   0
為了與 Matlab 相容,strcmp() 在比對結果相同時傳回 1,不同時傳回 0,這與 C 語言中的習慣剛好相反。
strncmp (s1, s2, n)

strncmp(s1, s2, n) 函數與 strncmp(s1, s2) 函數類似,但只比較字串 s1s2 的前 n 個字元是否相等,若相等則傳回 1,否則傳回 0,例如:

strncmp("abcd", "abce", 3)

輸出為

ans =  1

s1s2 其中有一個是字串的巢狀陣列,則會傳回相同長度的陣列,而陣列中包含巢狀陣列中各個字串比對的結果,而另外一個參數可以是字串的巢狀陣列(相同長度或是長度為 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