字串比較(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)
函數會判斷字串 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