Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用MATLAB';s substruct函数创建表示引用的结构,该引用使用;结束;?_Matlab - Fatal编程技术网

如何使用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