如何循环显示两个字符串数组中的不同元素?

How to display the differing elements in two string arrays in a loop?

我有两个字符串数组 - fg。我希望程序打印 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 显示对应于 z 中的 0 的条目(显示 wz 的不同成员) ,我该怎么做?

这里有一段小代码展示了如何实现:

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 contains y

Characters of x not in y:hello 3

一种方法是将 char 数组视为集合,找出集合之间的差异,然后打印缺失的条目。下面是如何在 字符 级别和 单词 级别上执行此操作的演示。

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