Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.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 Fortran:从字符串中删除字符_String_Fortran - Fatal编程技术网

String Fortran:从字符串中删除字符

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

如何从字符串中删除字符

例如,我有一个名为“year”的字符串,我想将其从4个字符更改为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
无效。