【Fortran】字符运算(赋值、切⽚、连接、逻辑运算及部分函数)
⽬录
【Fortran】字符赋值和操作
1) 赋值
CHARACTER(len=<len>)::var1[,var2,var3,...]
在对字符变量进⾏声明时,常常需要给定字符长度len,若不指定,len的默认值为1。
例⼦,如声明字符变量my_work,相应值为homework,若len⼩于8,则不会将homework显⽰完全,必须要≥8,多余的位置在字符串末后⽤空格填充。
PROGRAM my_test
IMPLICIT NONE
CHARACTER(len=8)::my_work ! 结果为:My work is homework!Oh!
CHARACTER(len=4)::my_work ! 结果为:My work is home!Oh!
CHARACTER(len=12)::my_work ! 结果为:My work is homework !Oh!
my_work = 'homework'
WRITE(*,*) 'My work is ',my_work,'!Oh!'
STOP
write的返回值END PROGRAM my_test
2) 操作
字符的操作主要有⼦串提取(即切⽚)、连接、逻辑运算和字符函数。
1. ⼦串提取,使⽤操作character(a:b),表⽰对character提取第a个到第b个的字符串,值得注意的是,字符串序号从1开始,如果仅截
取第a个字符,则character(a:a);
2. 连接,使⽤//将不同的字符串连接在⼀起。
PROGRAM my_test
IMPLICIT NONE
CHARACTER(len=8)::my_work,str1,str2
CHARACTER(len=3)::str3
CHARACTER(len=11)::str4
my_work = 'homework'
str1 = my_work(2:6)
WRITE(*,*) 'str1_1st : ',str1 ! 结果为:str1_1st : omewo,切⽚功能
str1(2:3) = 'XX'
WRITE(*,*) 'str1_2nd : ',str1 ! 结果为:str1_2nd : oXXwo,赋值对字符串进⾏修改
str2 = my_work(3:2)
WRITE(*,*) 'str2 : ',str2 ! 结果为:str2 : ,由于结束字符编号⼩于开始字符编号,输出空格
WRITE(*,*) 'The len of the str2_1st is: ',len(str2) ! 结果为: The len of the str2_1st is: 8,说明上述空格的个数为8个,就是声明的长度
str3 = '123'
str4 = str1 // str3
WRITE(*,*) 'str4 : ',str4 ! 结果为: str4 : oXXwo 123,连接功能,由于str1长度为8,因为有⼀些空格
STOP
END PROGRAM my_test
3. 逻辑运算
可以对字符串进⾏以下关系运算操作:
== 等于
/= 不等于
> ⼤于
< ⼩于
>= ⼤于或等于
<= ⼩于或等于
通过逐⼀⽐较单个字符在某个字符集(如ASCII字符集)中的排序,
①如果两个字符串长度len相同,可以从左往右逐⼀进⾏⽐较,如'AA'>'AB','AAAA'>'AABA';
②如果两个字符串长度len不⼀致,先执⾏①的判断,如果两个字符串⼀直到其中⼀个结束时始终是相同时,则认为长度较⼤的字符串
为⼤,如'AAB'>'AAAA','AAAAA'>'AAAA'。
需要注意的是,⽤关系运算符操作的结果可能会在具有不同字符集的计算机上运⾏⽽存在差别。因此可以使⽤Fortran内置逻辑函数进⾏避免:
LLT 字符串⼩于,使⽤⽅法为LLT(str1,str2),如果str1 < str2,则返回真,以下同理
LLE 字符串⼩于等于
LGT 字符串⼤于
LGE 字符串⼤于等于
上述字符串函数总是按照ASCII字符排列顺序来⽐较字符。
4. 字符函数
以下是⼀些内置的字符操作函数:
函数转换注释
ACHAR(int)整型 ——> 字符型返回参数int在ASCII排序序列中相应的字符
CHAR(int)整型 ——> 字符型返回参数int在所⽤计算机字符集排序序列中相应的字符,尽量少⽤,因为移植性低IACHAR(char)字符型 ——> 整型返回参数char在ASCII排序序列中相应的整数,是针对单个字符
ICHAR(char)字符型 ——> 整型返回参数char在所⽤计算机字符集排序序列中相应的整数,是针对单个字符,尽量少⽤,因为移植性低LEN(str)字符型 ——> 整型返回参数str的字符长度
LEN_TRIM(str)字符型 ——> 整型返回参数 str的字符长度,但是不包括 str尾部的空格
TRIM(str)字符型 ——> 字符
型
返回被截去尾部空格的参数str
INDEX(str1,str1[,back])字符型、逻辑型
——> 整型
返回str1中包含str2的第⼀个字符的序号,参数back可选,当为.TRUE.时,从末尾开始搜索。搜索成
功即停⽌执⾏。当匹配不成功时,返回数值0。
函数转换注释
具体例⼦:
PROGRAM char_test
IMPLICIT NONE
CHARACTER(len=1)::str1
CHARACTER(len=10)::str2
str1 = 'A'
str2 = 'abcdb'
WRITE(*,*) 'ASCII字符集中第65位置处的字符是 : ' , ACHAR(65)
WRITE(*,*) '运⾏电脑字符集中第65位置处的字符是 : ' , CHAR(65)
WRITE(*,*) 'ASCII字符集中A 的位置 : ' , IACHAR(str1)
WRITE(*,*) '运⾏电脑字符集中A 的位置 : ' , ICHAR(str1)
WRITE(*,*) 'str2的长度 : ' , LEN(str2)
WRITE(*,*) 'str2不包括尾部空格的长度 : ' , LEN_TRIM(str2)
WRITE(*,*) '不包括尾部空格的str2 : ' , TRIM(str2) , ' , 相应长度为 : ', LEN(TRIM(str2))
WRITE(*,*) 'str2中⾸次出现b字符的位置是:' ,INDEX(str2,'b')
WRITE(*,*) 'str2中最后出现b字符的位置是:' ,INDEX(str2,'b',.TRUE.)
STOP
END PROGRAM char_test
相应的结果为:
ASCII字符集中第65位置处的字符是 : A
运⾏电脑字符集中第65位置处的字符是 : A
ASCII字符集中A 的位置 : 65
运⾏电脑字符集中A 的位置 : 65
str2的长度 : 10
str2不包括尾部空格的长度 : 5
不包括尾部空格的str2 : abcdb , 相应长度为 : 5
str2中⾸次出现b字符的位置是: 2
str2中最后出现b字符的位置是: 5
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论