2016-04-14 1 views
1

У меня есть массив сосколько раз строка присутствует в массиве ячеек

a={'2';'23';'231';'2312';'23121';'231213';'3';'31'}

и массив ячеек

b={'2' '21' '' '' '' '' '';'3' '32' '' '' '' '' '';'2' '24' '242' '2423' '' '' '';'(34)' '(34)2' '' '' '' '' '';'4' '43' '432' '4323' '' '' '';'3' '32' '321' '3212' '32124' '321243' '';'3' '34' '343' '3432' '34323' '' '';'(34)' '(34)3' '' '' '' '' '';'2' '21' '212' '' '' '' '';'3' '32' '323' '' '' '' '';'4' '41' '413' '4132' '41321' '413213' '4132132';'3' '34' '342' '3423' '34232' '342321' '';'4' '42' '421' '4212' '42124' '' '';'4' '43' '432' '4324' '' '' '';'4' '43' '432' '4323' '43234' '' ''} 

Я хочу знать, сколько раз струны в АРЕ присутствует в б

eg string '2' is present 3 times 
    string '23' is present 0 times 
    string '231' is present o times 
    string '3' is present 5 times 

это то же самое для всех строк в

Я хочу, чтобы вывести массив с количеством раз, когда строки в a представлены в b, вы можете мне помочь?

Если вопрос не ясен, я пытаюсь объяснить лучше

+1

Я думаю, [ 'strcmp'] (http://fr.mathworks.com/help/matlab/ref/strcmp.html) Сделаю. попробуйте код ..! – shamalaia

ответ

3

strcmp(S1,S2) возвращает 1, если S1 и S2 одинаковы. Используйте find, чтобы найти, какие индексы содержат строку, которую вы пытаетесь найти, и затем проверьте возвращаемый вектор length. Наконец, превратите это в строку с num2str. Теперь у вас есть количество строк, которое присутствует в b.

Вот код:

result = cell(length(a),1); 
for k = 1:length(a) 
    result{k} = sprintf('string ''%s'' is present %d times', a{k}, length(find(strcmp(b,a(k))))); 
end 

Результат:

result = 

'string '2' is present 3 times' 
'string '23' is present 0 times' 
'string '231' is present 0 times' 
'string '2312' is present 0 times' 
'string '23121' is present 0 times' 
'string '231213' is present 0 times' 
'string '3' is present 5 times' 
'string '31' is present 0 times' 
+1

Nice, 'sprintf' может быть более читаемым, чем использование' [] 'для объединения строк. Также, если вы делаете 'result {k} = ...', вы можете оставить '{}' на RHS. – Dan

+0

Я думаю, что член может сделать это без цикла, но это хороший ответ. – GameOfThrows

+0

Спасибо @ Dan, очень хорошо! – JCKaz