У меня есть два строковых массива - 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) , как я это сделал?

1
Ahmad Risyad Granada 24 Сен 2018 в 17:51

2 ответа

Лучший ответ

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

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 не в y: привет 3

2
CAta.RAy 24 Сен 2018 в 15:27

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

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.

1
Dev-iL 24 Сен 2018 в 15:58