我可以引用字符串函数结果的子字符串吗? [重复]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我可以引用字符串函数结果的子字符串吗? [重复]相关的知识,希望对你有一定的参考价值。

这个问题在这里已有答案:

我有一个函数str,它取一个整数并将其转换为字符串。我还想考虑该值的字符串的子字符串,如果它是字符值而不是字符函数,这将很容易。

换句话说,我想写这样的东西:

str(12345)(2:3)

而不是必须这样做:

character(10) :: c
c = str(12345)
print *, c(2:3)

或者滚动我自己的substr()功能。有没有办法做我想要的而不将字符值存储在临时字符变量或编写另一个函数?

这是一个完整的程序:

program main

   character(10) :: c

   ! works fine
   c = str(12345)
   print *, c(2:3)

   ! nope
   print *, str(12345)(2:3)

   ! this would work if i wrote a substr function
   print *, substr( str(12345), 2, 3 )

contains

   character(len=1064) function str(k)
      ! convert an integer to string
      integer, intent(in) :: k
      write (str, *) k
      str = adjustl(str)
   end function str

end program main
答案

不,您不能对Fortran表达式进行子串或数组索引。函数结果是一个表达式。避免临时的最接近的是使用Fortran 2003中的associate,但是你也不会节省太多代码

associate(c=>str(12345))
  print *,c(2:3)
end associate

以上是关于我可以引用字符串函数结果的子字符串吗? [重复]的主要内容,如果未能解决你的问题,请参考以下文章

是否有用于查找字符串中最长且不重复长度的子字符串的结构函数?

c ++在字符串中查找重复的子字符串

点后的Sql值更改[重复]

leetcode459. 重复的子字符串

c#数组的子字符串等价物[重复]

SQL String - 删除2次出现之间的子字符串