如何使用MATLAB';s substruct函数创建表示引用的结构,该引用使用;结束;?
我想使用该函数创建一个用于如何使用MATLAB';s substruct函数创建表示引用的结构,该引用使用;结束;?,matlab,Matlab,我想使用该函数创建一个用于subsref的结构。其目的是使用subsref而不是通常的()表示法对字符串进行索引,因为我订阅的是函数的输出。这是我正在尝试做的一个简单示例(在我的实际代码中,这是在cellfun中使用的,因此字符串可以具有不同的长度,并且替换内容并不总是在同一位置): 在这里,我尝试使用子结构定义此订阅: data = 'quick brown fox'; S = substruct('()', {[7:end]}); subsref(strrep(data, 'brown',
subsref
的结构。其目的是使用subsref
而不是通常的()
表示法对字符串进行索引,因为我订阅的是函数的输出。这是我正在尝试做的一个简单示例(在我的实际代码中,这是在cellfun
中使用的,因此字符串可以具有不同的长度,并且替换内容并不总是在同一位置):
在这里,我尝试使用子结构定义此订阅:
data = 'quick brown fox';
S = substruct('()', {[7:end]});
subsref(strrep(data, 'brown', 'green'), S)
但这只是给了我一个错误:
Error using substruct (line 30)
SUBSTRUCT takes at least two arguments.
Error in myfile (line 3)
S = substruct('()', {(7:end)});
我已经一遍又一遍地阅读了substruct
和substref
的文档,它们都没有提到end
。如何做到这一点?据我所知,使用subsref
无法做到这一点,它假定您确切知道您需要哪些subs
使用@function\u handle
动态确定结束
:
f = @(x) x(7:end);
f(strrep(data, 'brown', ''))
ans =
fox
把end
改成numel(数据)
怎么样?Marcin是对的,numel(数据)修复了它。事实证明,end
只能用于索引实际数组,而不能创建要在subsref中使用的结构数组(即S)。numel(data)
不正确,因为它在strrep
之前计算数据的长度。如果长度改变,它将出错。据我所知,使用subsref
无法做到这一点。感谢您的帮助。在我最初的示例中,我没有删除“brown”一词,因此答案应该是“greenfox”,但你是对的,它看起来不像subsref
能够处理这个问题。
f = @(x) x(7:end);
f(strrep(data, 'brown', ''))
ans =
fox