Fortran语言可以把字符作为单个字符或连续的字符串。
字符可以是从基本的字符集,即从字母,十进制数字,下划线和21特殊字符所采取的任何符号。
字符常量是一个固定的值的字符串。
内部数据类型的字符存储字符和字符串。字符串的长度可以通过len个符来指定。如果没有指定长度,它是长度是1. 可以将字符串按位置指的是指在单个字符;最左边的字符的位置是1。
字符声明
声明一个字符类型的数据是一样的其他变量:
type-specifier :: variable_name
例如,
character :: reply, sex
可以指定一个值类似,
reply = ‘N’ sex = ‘F’
下面的例子演示了声明和使用字符数据类型:
program hello implicit none character(len=15) :: surname, firstname character(len=6) :: title character(len=25)::greetings title = 'Mr. ' firstname = 'Rowan ' surname = 'Atkinson' greetings = 'A big hello from Mr. Beans' print *, 'Here is ', title, firstname, surname print *, greetings end program hello
当编译并执行上述程序,将产生以下结果:
Here is Mr. Rowan Atkinson A big hello from Mr. Bean
字符串接
连接运算符//符,连接字符。
下面的例子说明了这一点:
program hello implicit none character(len=15) :: surname, firstname character(len=6) :: title character(len=40):: name character(len=25)::greetings title = 'Mr. ' firstname = 'Rowan ' surname = 'Atkinson' name = title//firstname//surname greetings = 'A big hello from Mr. Beans' print *, 'Here is ', name print *, greetings end program hello
当编译并执行上述程序,将产生以下结果:
Here is Mr.Rowan Atkinson A big hello from Mr.Bean
一些字符函数
下表显示描述一些常用字符的函数:
函数 | 描述 |
---|---|
len(string) | 它返回字符串的长度 |
index(string,sustring) | 在一个字符串找出子串的位置,如果没有找到则返回0。 |
achar(int) | 将整数转换成一个字符 |
iachar(c) | 它可将一个字符转换为整数 |
trim(string) | 它返回去掉尾随空格的字符串。 |
scan(string, chars) | 它会搜索“string”由左到右(除非back=.true)包含在“string”任何字符的第一次出现。它返回一个整数,该字符,或零的位置,如果没有文字的“字符”已被找到。 |
verify(string, chars) | 它扫描“string”由左到右(除非back=.true)不包含在“string”任何字符的第一次出现。它返回一个整数,该字符的位置,如果只在“字符”的字符被找到,或者没有找则返回零。 |
adjustl(string) | 它留下左截于“string”包含的字符 |
adjustr(string) | 它留下右截于“string”包含的字符 |
len_trim(string) | 它返回一个整数等于“string”(len(string))减去尾随空白的数量 |
repeat(string,ncopy) | 它返回一个字符串长度等于“ncopy”次数“string”的长度,并含有“string”的“ncopy”串联拷贝 |
实例 1
这个例子显示使用index函数:
program testingChars implicit none character (80) :: text integer :: i text = 'The intrinsic data type character stores characters and strings.' i=index(text,'character') if (i /= 0) then print *, ' The word character found at position ',i print *, ' in text: ', text end if end program testingChars
当编译并执行上述程序,将产生以下结果:
The word character found at position 25 in text : The intrinsic data type character stores characters and strings.
示例 2
这个例子演示了如何使用trim函数:
program hello implicit none character(len=15) :: surname, firstname character(len=6) :: title character(len=25)::greetings title = 'Mr.' firstname = 'Rowan' surname = 'Atkinson' print *, 'Here is', title, firstname, surname print *, 'Here is', trim(title),' ',trim(firstname),' ', trim(surname) end program hello
当编译并执行上述程序,将产生以下结果:
Here is Mr. Rowan Atkinson Here is Mr. Rowan Atkinson
示例 3
这个例子演示了如何使用achar函数
program testingChars implicit none character:: ch integer:: i do i=65, 90 ch = achar(i) print*, i, ' ', ch end do end program testingChars
当编译并执行上述程序,将产生以下结果:
65 A 66 B 67 C 68 D 69 E 70 F 71 G 72 H 73 I 74 J 75 K 76 L 77 M 78 N 79 O 80 P 81 Q 82 R 83 S 84 T 85 U 86 V 87 W 88 X 89 Y 90 Z
检查词法顺序字符
下面的函数确定的字符的词法序列:
函数 | 描述 |
---|---|
lle(char, char) | 进行比较的第一个字符是否是词汇上小于或等于所述第二字符 |
lge(char, char) | 进行比较的第一个字符是否是词汇上大于或等于所述第二字符 |
lgt(char, char) | 进行比较的第一个字符是否是词汇上比第二字符大 |
llt(char, char) | 比较第一个字符是否是词汇上比小于第二字符 |
示例 4
下面的函数演示了如何使用:
program testingChars implicit none character:: a, b, c a = 'A' b = 'a' c = 'B' if(lgt(a,b)) then print *, 'A is lexically greater than a' else print *, 'a is lexically greater than A' end if if(lgt(a,c)) then print *, 'A is lexically greater than B' else print *, 'B is lexically greater than A' end if if(llt(a,b)) then print *, 'A is lexically less than a' end if if(llt(a,c)) then print *, 'A is lexically less than B' end if end program testingChars
当编译并执行上述程序,将产生以下结果:
a is lexically greater than A B is lexically greater than A A is lexically less than a A is lexically less than B