Как отобразить отличающиеся элементы в двух строковых массивах в цикле? - PullRequest
0 голосов
/ 24 сентября 2018

У меня есть два строковых массива - f и g.Я хочу, чтобы программа печатала элементы g, которых нет в f.

У меня есть следующий код:

% <for ... >
  % <get `f` and `g` as inputs>
  ...
  x = 0;
  y = 0;
  while x < a
    while y < b
      w = string(f);
      z = string(g);
      tf = strcmp(w,z);
      for tf == 0 %         < < < < < Help needed with this
        fprintf('%s\n',z)
      end
      y = y+1;
    end
    x = x+1;
  end
% end

Результат, который я получаю для tfвыглядит как 1 0 0.Я хочу, чтобы fprintf отображал записи, которые соответствуют 0 в z (для отображения различных элементов w и z), как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 24 сентября 2018

Один из способов сделать это - обработать массивы символов как наборы, найти разницу между наборами, а затем распечатать пропущенные записи.Ниже приведены демонстрации того, как это сделать на уровне символ и на уровне word .

f = 'this is a char array';
g = 'this is a longer char array';

% character-level difference:
d = setdiff(g,f);
disp(d); % output: "eglno"

% word-level difference:
tf = strsplit(f);
tg = strsplit(g);
d = setdiff(tg,tf);
disp(d); % output: "longer"

Если вы вводите "strings", а не 'char arrays', просто оберните их в char() перед началом.

См. также: setdiff.

0 голосов
/ 24 сентября 2018

Вот небольшой код, показывающий, как этого добиться:

y = '12';
x = 'hello 123';

% First, check if the content of y is present in x
temp = contains(x, y);
if temp == 1 % x contains y
    disp ('x contains y');
else
   disp ('X does not contain y'); 

end

% Second, replace y characters with nothing.
% Result: Only characters not present in y will remain
% for more information type 'docs strrep'
temp2 =  strrep(x,y,'');
disp (['Characters of x not in y: ' temp2])

Вы увидите:

x содержит y

Символы x не ву: привет 3

...