我想检查给定字符串是否包含在字符串列表/数组中。在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
明显不同,其中空格会使两个字符串不同。