Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.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
String 在matlab中用运算符和宏替换字符串_String_Matlab_Macros_Replace - Fatal编程技术网

String 在matlab中用运算符和宏替换字符串

String 在matlab中用运算符和宏替换字符串,string,matlab,macros,replace,String,Matlab,Macros,Replace,我有两个变量a和b 我想从用户那里得到一个要形成的函数 str='operator' 它可以是“,”| |“,”&&等等。 我使用了enum和switch-case 尽管它可以工作,但对于许多函数来说,这种解决方案一点也不优雅 有没有一种方法可以计算字符串并使用其中的内容?类似宏的东西? 示例:str='='=' 估值(a str b)==>执行a==b 我在matlab中查找有关宏的信息,但找不到明确的答案。因此,解释一下存在什么以及如何使用它可能很好(链接也很好) 我会使用地图: oper

我有两个变量
a
b

我想从用户那里得到一个要形成的函数

str='operator'
它可以是
”| |“
”&&
等等。
我使用了
enum
switch
-
case

尽管它可以工作,但对于许多函数来说,这种解决方案一点也不优雅

有没有一种方法可以计算字符串并使用其中的内容?类似宏的东西? 示例:
str='='='
估值(a str b)
==>执行
a==b

我在matlab中查找有关宏的信息,但找不到明确的答案。因此,解释一下存在什么以及如何使用它可能很好(链接也很好)

我会使用地图:

operators={'+',@plus;'-',@minus;'==',@eq};
mapObj = containers.Map(operators(:,1),operators(:,2));
如果您不知道操作员(
++
)在
doc+

要使用它,请从映射中获取函数句柄:

f=mapObj('+')
并对其进行评估:

f(a,b)

您可以使用
eval

  a = 1;
  b = 3;
  st = '>';  %Take from user
  stWithOp = ['a' st 'b' ];
  eval(stWithOp);

但是,请注意,从用户处获取字符串可能会允许用户注入恶意代码。例如,用户可以输入:

 %DO NOT TRY THIS AT HOME!
 st = '; rmdir(''C:\'') ';

谢谢我要试试。有没有办法识别恶意输入?我想在这种情况下,我可以检查输入长度是否不超过1。但通常?
==
的长度为2,因此您必须至少允许此长度。根据您放置空格的位置,
;f
将调用带有参数
'b'
f
,或者
+5
将在
b
中添加一个前导数字。