检查列表/字符串数组是否包含字符串

时间:2017-12-15 08:10:03

标签: fortran

我想检查给定字符串是否包含在字符串列表/数组中。在python我会做这样的事情:

test_string = 'alpha'

if test_string in ['alpha', 'beta', 'gamma', 'delta']:
    print('found it')
else:
    print('it's not there')

模仿这个的简单FORTRAN程序显然不起作用:

PROGRAM STRINGCHECK
  IMPLICIT NONE

  CHARACTER(len = 10) :: test_string
  CHARACTER(len = 10), DIMENSION(4) :: string_array

  test_string='alpha'
  string_array = ['alpha', 'beta', 'gamma', 'delta']

  IF (ANY( string_array == test_string)) THEN
     WRITE(*,*) 'found it'
  END IF

END PROGRAM

事实上,它已经在使用

进行数组赋值时失败了
Error: Different CHARACTER lengths (5/4) in array constructor at (1)

除了明确检查每个字符串之外真的没别办法吗?:

  IF ((test_string == 'alpha') .or. (test_string == 'beta') .or. &
      (test_string == 'gamma') .or. (test_string == 'delta')) THEN
     WRITE(*,*) 'found it'
  END IF

更新

评论者确实是对的,更改数组的构造使字符串比较工作正常:

CHARACTER(len = 10) :: test_string
CHARACTER(len = 10), DIMENSION(4) :: string_array

test_string='alpha'
string_array(1) = 'alpha'
string_array(2) = 'beta'
string_array(2) = 'gamma'
string_array(2) = 'delta'

IF (ANY(string_array == test_string)) THEN
   WRITE(*,*) 'found it'
END IF

然而,以这种方式构造数组在某种程度上违背了这项任务的目的,即在IF语句中定义字符串数组,就像在我的示例python代码中一样。

更新#2

感谢高性能标记,我的问题的答案就像填充一样简单 数组中包含空格的所有字符串使它们具有相同的长度(编辑:根据VladimirF的推荐,我将[...]替换为(/.../)

IF (ANY((/ 'alpha', 'beta ', 'gamma', 'delta'/) == 'beta')) THEN
   WRITE(*,*) 'found it'
END IF

这与python明显不同,其中空格会使两个字符串不同。

0 个答案:

没有答案