2016-04-05 9 views
0

ich den String s1 und s2 habeVergleich Strings unterschiedlicher Dimensionen

s1={'1' '631' '618' '574' '678'} 
s2={'1' '596' '674' '' '';'674' '631' '1' '631' '1';'641' '617' '674' '631' '654';'674' '673' '674' '673' '674';'674' '618' '1' '618' '631';'631' '1' '631' '674' '740';'739' '740' '733' '674' '631';'674' '673' '674' '1' '641';'618' '1' '631' '618' '631';'674' '631' '618' '631' '618';'674' '631' '1' '631' '625';'641' '642' '618' '631' '618';'618' '631' '1' '631' '1'} 

I s1 und seinen Teil

{'1'} 
{'1' '631'} 
{'1' '631' '618'} 
{'1' '631' '618' '574'} 
{'1' '631' '618' '574' '678'} 
{'631'} 
{'631' '618'} 
{'631' '618' '574'} 
{'631' '618' '574' '678'} 
{'618'} 
{'618' '574'} 
{'618' '574' '678'} 
{'574'} 
{'574' '678'} 
{'678'} 

mit s2 vergleichen will: Ich habe strcmp verwendet (s1, s2), aber Ich erhalte das erwartete Ergebnis nicht. Kannst du mir helfen?

Antwort

2

ich sehr empfehlen alle Strings in Zahlen und Verwendung Matrix-Operationen statt String-Operationen Umwandlung:

S1 = cellfun(@str2num, s1) 
S2 = cell2mat(str2double (s2)) %// NOTE its str2double here which converts any empty string or char into a NaN 

jetzt haben die vergleichen, wenn Sie schneiden wollen (was ich denke, Sie sind)

[intersect ind] = ismember(S2,S1); 

Wenn Sie mit Strings bleiben möchten, können Sie etwas tun, das ist viel effizienter:

ind=find(ismember(s2,s1{1})) 
>> ind = 

1 
19 
22 
28 
31 
37 
39 
47 
54 
65 

Das Problem mit strcmp ist, dass es vergleicht zwei Strings und gibt eine logische, in Ihrem Fall, Sie stehen vor 5 * 65 Operationen, die zeitaufwendig und schrecklich ist im Allgemeinen zu verarbeiten. so ist die ismember Funktion Ihre beste Wahl.

die "s1 und von Teil" zu generieren, Sie combnk wie verwenden können:

V = combnk(S1,1) 
V = combnk(S1,2) %//change 1 to 5 based on the combinations. 
+1

Für 'str2double' Sie brauchen es nicht zu wickeln in' cellfun' und 'cellmat'. Tun Sie einfach 'str2double (s2)', da es ein Zellen-Array von Strings akzeptieren kann. – Suever

+0

@Suever ohhh nett, habe das nicht gesehen – GameOfThrows