String 在MATLAB中迭代字符串列表

String 在MATLAB中迭代字符串列表,string,matlab,loops,String,Matlab,Loops,我试图在MATLAB中迭代字符串列表。问题是,在“for”循环中,迭代器被视为“cell”而不是字符串 for str = {'aaa','bbb'} fprintf('%s\n',str); end ??? Error using ==> fprintf Function is not defined for 'cell' inputs. 解决此问题的正确方法是什么?您应该通过str{1}调用单元格的内容,如下所示以使其正确: for str = {'aaa','bbb'}

我试图在MATLAB中迭代字符串列表。问题是,在“for”循环中,迭代器被视为“cell”而不是字符串

for str = {'aaa','bbb'}
  fprintf('%s\n',str);
end

??? Error using ==> fprintf
Function is not defined for 'cell' inputs.

解决此问题的正确方法是什么?

您应该通过
str{1}
调用单元格的内容,如下所示以使其正确:

for str = {'aaa','bbb'}
  fprintf('%s\n',str{1});
end
下面是有关打印单元格数组内容的详细信息

str={'aaa','bbb'};
fprintf('%s\n',str{:});
对于循环,不需要

编辑:
另请参见:
cellfun

从R2016b开始,您可以使用:


我想知道这是否是MATLAB设计中的一个概念性缺陷。为什么要这样建造?@Memming-Nope。只有那些不知道如何使用printf的函数家族
char(str)
的人也能工作,而且如果循环被改变,str作为char数组而不是cell出现,也不会失败。每当我使用字符串的cell数组时,这真的让我很困扰。有没有一种更优雅的方法来迭代字符串的单元格数组,直接获取单元格内容而不调用str{1}编辑--nevermind,刚刚发现:@petrichor我现在以编写matlab为生。我已经深深陷入了cellfun和类似这样的重复通话中。我还学到了关于matlab的一条真正的规则:永远不要使用循环。即使是一堆乱七八糟的
repmat
permute
重塑
也比迭代快。
for str = ["aaa" "bbb"]
  fprintf('%s\n',str);
end