2016-02-29 25 views
-1

我有我試圖查詢解決MATLAB:使用STRCMP(S1,S2)用於處理字符串長度可變矢量

我知道,人們可以使用strcmp(s1,s2)比較兩個不同的字符串,看看它們是否相同。如果是這樣,它給出1。

然而,人們將如何,如果你有一個可變長度數組滿弦的,你想在陣列中的所有字符串是否是相同的解決這個問題。

例如:['NACA64A010' 'NACA64A010' 'NACA64A010' 'NACA64A010']我們可以看到,所有的字符串數組中一樣。但是,如何使用strcmp(s1,s2)

謝謝你們!

+0

我認爲你的例子應該使用{}而不是[]?否則它是一個字符串。 – Daniel

+4

'numel(unique({'NACA64A010''NACA64A010''NACA64A010''NACA64A010'}))== 1'? – TroyHaskin

+0

如果其中一個答案解決了您的問題,請點擊複選標記考慮[接受它](http://meta.stackexchange.com/q/5234/179419)。這表明你已經找到了解決方案,這不再是一個懸而未決的問題。如果您的問題沒有得到解答,請解釋缺少的內容。 – Daniel

回答

0

如果你正在解決一個矩陣問題(即每行是一個字符串)沒有特別在我看來不錯的解決方案,但如果你的字符串被包含到一個單元陣列,事情變得更容易,更好。

所以我們開始創建這樣的電池陣列:

myStrings={'NACA64A010' 'NACA64A010' 'NACA64A010' 'NACA64A010'}; 

其中每個單元包含一個字符串。這將使你的代碼更健壯,因爲每個字符串可以有不同的長度(如果連接矩陣中的所有字符串,這是不正確的)。
然後你指定要找到這樣的單元陣列內,其字符串:

stringThatMustBeTested='NACA64A010'; 

現在你可以使用cellfun(),這是適用另一個函數在給定單元陣列的每一個細胞如下功能:

results=cellfun(@(x) strcmp(x,stringThatMustBeTested),myStrings); 

這種線僅僅意味着「應用strcmp()每一個一般小區內xmyStrings細胞與stringThatMustBeTested比較」。

變量results將是一個邏輯輸出,其中元素j將爲true,如果您的單元格數組中的第j個單元格與要測試的字符串相同。如果results完全由1 s組成(您可以檢查爲if sum(results)==length(results)),則myStrings中的所有字符串都是相同的(假設stringThatMustBeTested是單元格數組中的唯一字符串,但無論如何,此解決方案可以擴展爲更廣泛的字符串在單元格內搜索)。

2

你可能不得不使用記strcmp一個兩兩比較,但您可以直接在單元陣列使用它:

x={'NACA64A010' 'NACA64A010' 'NACA64A010' 'NACA64A010'} 
result=all(strcmpi(x{1},x(2:end))) 

的第一個元素進行比較,以剩餘的元素。它只有在所有元素相等的情況下才返回true。對於兩兩比較,你能我們:

[~,~,c]=unique(x); 
result=bsxfun(@eq,c,c.') 
2

如果你想所有成對比較字符串之間:叫ndgrid生成所有組合的索引,然後索引字串的單元陣列,並呼籲strcmp

x = {'NACA64A010' 'NACA64A010' 'NACA64A010' 'NACA64A010'}; 
[ii, jj] = ndgrid(1:numel(x)); 
result = strcmp(x(ii), x(jj)); 

在這種情況下

result = 
    1  1  1  1 
    1  1  1  1 
    1  1  1  1 
    1  1  1  1 

,因爲所有的字符串是相同。

相關問題