String Fortran:从字符串中删除字符
如何从字符串中删除字符 例如,我有一个名为“year”的字符串,我想将其从4个字符更改为2个字符。它的定义如下:String Fortran:从字符串中删除字符,string,fortran,String,Fortran,如何从字符串中删除字符 例如,我有一个名为“year”的字符串,我想将其从4个字符更改为2个字符。它的定义如下: 字符(4)::year=“2011” 如何将字符串截断为2个字符,使其不是year=“2011”,而是year=“11”?我认为是年(3:4),但不要在上面引用我;) 您确实可以使用年(3:4);但是,您的字符串仍然有四个字符长,即它将包含两个数字和两个空格。为了说明这一点,以下是一个示例: program trunc character(len=4) :: year = "2
字符(4)::year=“2011”
如何将字符串截断为2个字符,使其不是
year=“2011”
,而是year=“11”
?我认为是年(3:4)
,但不要在上面引用我;) 您确实可以使用年(3:4)
;但是,您的字符串仍然有四个字符长,即它将包含两个数字和两个空格。为了说明这一点,以下是一个示例:
program trunc
character(len=4) :: year = "2011"
write(*,'(A,A,A)') '..', year, '..'
year = year(3:4)
write(*,'(A,A,A)') '..', year, '..'
end program trunc
这张照片
..2011..
..11 ..
要真正获得
“11”
而不是“11”
,您必须将值分配给只能包含两个字符的变量。使用以下命令:
trim(year(3:4))
您可以使用year(3:4)
并将year
声明为延迟长度字符,以避免尾随空格。这是Fortran 2003的一项功能,因此需要一个与之兼容的编译器,并且不能在声明中初始化变量
例如:
program deflen
implicit none
character(len=:), allocatable :: year
year = '2011'
write(*,'(A,A,I0)') year,'_LEN=', LEN(year)
year = year(3:4)
write(*,'(A,A,I0)') year,'_LEN=', LEN(year)
end program deflen
这张照片是:
2011_LEN=4
11_LEN=2
为了去掉尾随空格和前导空格,可以使用trim(adjustl(string))@Zhenya,这在一定程度上是正确的。如果使用“trim”,则不删除空格,只显示/处理非空白字符。如果您知道字符串的“有趣”部分有多长,您也可以简单地访问相关的子字符串。但是,当OP询问如何将变量精确设置为“11”时,我假设他不想让空格粘在周围。事实上,你是对的,trim(str)不会改变字符串的长度。这可能是一个品味的问题,但我个人更喜欢保留所有固定长度的字符串,比如字符*99,这样我就不必记住每个给定字符串的确切长度。你确定
character(4)
::year`创建了一个4个字符的数组(而不是长度为4的字符串?)。在我看来,您需要:字符,维度(4)::year
或字符::year(4)
。我甚至不确定这种语法是否真的是标准的——与我在问题示例中一直看到的character*4 year
相比,year(3:4)
是长度为2的字符表达式'11'
和trim(year(3:4))
是完全相同的。在更一般的情况下,它可能是长度为1或长度为0的字符。所以,这似乎并没有回答这个问题。最后,您打算如何使用该表达式year=trim(year(3:4))
仍将year
保留为长度为4个字符的变量,且trim
无效。