String 在Fortran子例程中传递要执行的字符串
在下面的子例程中,我想传递一个名为String 在Fortran子例程中传递要执行的字符串,string,fortran,fortran90,subroutine,String,Fortran,Fortran90,Subroutine,在下面的子例程中,我想传递一个名为str的字符串变量。如果它是'poly','gaus','slat',那么它有一个预定义的动作(fval=参见下面的代码)。我想让用户指定一个要使用的函数,并将其作为字符串变量传递 那就是 如果str='3*cos(i*t),那么我希望fval等于3*cos(i*t)。如何让Fortran解释作为命令输入的字符串,并由Fortran执行 subroutine f(fval, i, t, str) implicit none integer, parameter
str
的字符串变量。如果它是'poly'
,'gaus'
,'slat'
,那么它有一个预定义的动作(fval=
参见下面的代码)。我想让用户指定一个要使用的函数,并将其作为字符串变量传递
那就是
如果str='3*cos(i*t)
,那么我希望fval
等于3*cos(i*t)
。如何让Fortran解释作为命令输入的字符串,并由Fortran执行
subroutine f(fval, i, t, str)
implicit none
integer, parameter :: ikind = selected_int_kind(8)
integer, parameter :: dbl = selected_real_kind(15,307)
integer(kind = ikind) :: i
real(kind = dbl) :: fval, t
character str*100
if(str .eq. 'poly') then
fval = t**i
elseif(str .eq. 'slat') then
fval = exp(-i*t)
elseif(str .eq. 'gaus') then
fval = exp(-i*t*t)
else
fval = ???
endif
end subroutine
你不能。不容易。不过,您可以做两件事:
- 首先,可以使用函数指针。这里有一个简单的例子-其思想是您可以传递在别处定义的函数名。这可能足以解决你的问题
- 您可以调用一个库来解析字符串并计算表达式。我对fortran一无所知,但您的fortran编译器可能支持调用c例程。对于gfortran(可能还有其他的),这看起来是可行的-(示例fortran代码位于)
- 首先,可以使用函数指针。这里有一个简单的例子-其思想是您可以传递在别处定义的函数名。这可能足以解决你的问题
- 您可以调用一个库来解析字符串并计算表达式。我对fortran一无所知,但您的fortran编译器可能支持调用c例程。对于gfortran(可能还有其他的),这看起来是可行的-(示例fortran代码位于)
- 你不能。不容易。不过,您可以做两件事:
实际上,这很简单
子程序f(fval,i,t,str)
...
字符(len=*),意图(in)::str
...
结束子程序
诀窍是将伪字符串参数定义为“长度未知”,但使用
intent(in)
修饰符 实际上,这很简单
子程序f(fval,i,t,str)
...
字符(len=*),意图(in)::str
...
结束子程序
诀窍是将伪字符串参数定义为“长度未知”,但使用
intent(in)
修饰符 我建议使用Lua,它很容易在Fortran应用程序中编译,可以用来计算字符串。也许会给你一个想法,如何做到这一点。我认为第一种方法行不通。问题在于“在别处定义”。我希望这适用于任何作为字符串输入的函数。至于你的第二个选择——我想这正是我想要的!我建议使用Lua,它很容易在Fortran应用程序中编译,可以用来计算字符串。也许会给你一个想法,如何做到这一点。我认为第一种方法行不通。问题在于“在别处定义”。我希望这适用于任何作为字符串输入的函数。至于你的第二个选择——我想这正是我想要的!我认为,对这个问题的进一步关注将表明,这不是一个答案。这个问题要求解决解析字符串以获取其包含的数学表达式的问题。我认为对这个问题的进一步关注将表明这不是一个答案。该问题要求解决解析字符串中包含的数学表达式的问题。