如果在Matlab中带有字母串的语句

时间:2017-04-19 12:20:10

标签: matlab

我在Matlab中有以下单元格,其中包含字母a,b,c,d

的各种组合
%all combinations containing 'a' and/or 'b'
G1={'a', 'ab', 'ac', 'ad', 'abc', 'acd', 'abd', 'abcd', 'b', 'bc', 'bd', 'bcd'};  

%all combinations containing 'c' and/or 'd'
G2={'c', 'ac', 'bc', 'cd', 'abc', 'acd', 'bcd', 'abcd', 'd', 'ad', 'bd', 'abd'};

%all combinations containing 'c'
G3={'c', 'ac', 'bc', 'cd', 'acd', 'abd', 'bcd', 'abcd'}; 

然后我构建了维度

的单元格all
allsize=size(G1,2)*size(G2,2)*size(G3,2);

包含将G1的一个元素与G2的一个元素与一个G3元素匹配的所有可能方法。

all=cell(allsize,3);
 count=0;

 for h=1:size(G1,2)
     for k=1:size(G2,2);
         for j=1:size(G3,2);
             count=count+1;
             all(count,1)=G1(h);
             all(count,2)=G2(k);
             all(count,3)=G3(j);

         end
     end
 end

问题:我想构建维check的向量allsize x 1,如果[check(l)=1包含all(l,1) a all(l,2)包含c] [all(l,1)包含b {{ 1}}包含all(l,2)],否则为零。

我在撰写 if condition

时遇到了问题
d

你能提供一些帮助吗?

1 个答案:

答案 0 :(得分:1)

(对于if语句,总是最好显示你尝试的而不是一些伪代码,但是......)

首先使用all作为变量名称是不好的 - 它是一个重要的内置函数,您可能想要使用它...我已将其重命名为allG下面。但你可能想要这样的东西:

check(l) = (any(allG{l,1}=='a') && any(allG{l,2}=='c')) || ...
           (any(allG{l,1}=='b') && any(allG{l,2}=='d'))

注意我还没有使用if语句,因为右侧评估的逻辑值(真/假值)通常可以与1和0相同的方式使用。 ..

此外,我们将字符串视为字符数组,因此'abcd'=='b'之类的内容会返回[0 1 0 0]逻辑数组...然后我们使用any()来查看是否存在值为1(真)。