在对字符变量进行声明时,常常需要给定字符长度 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!'
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,因为有一些空格
    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字符排列顺序来比较字符。

  1. 字符函数
    以下是一些内置的字符操作函数:
函数转换注释
ACHAR(int)整型 ——> 字符型返回参数intASCII排序序列中相应的字符
CHAR(int)整型 ——> 字符型返回参数int在所用计算机字符集排序序列中相应的字符,尽量少用,因为移植性低
IACHAR(char)字符型 ——> 整型返回参数charASCII排序序列中相应的整数,是针对单个字符
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.)
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
				
Fortran分割字符串字符串替换的子程序 !============================================================= subroutine StringSplit(InStr,delimiter,StrArray,nsize) !---------------------------------------------- !---将字符串
文章目录前言一、表达式1.常量表达式2.非常量表达式二、赋值三、类型转换四、逻辑表达式运算符五、逻辑变量和赋值六、if 语句1、形式12、形式23、Nested if statements.嵌套IF语句 Fortran77的表达式和赋值 一、表达式 1.常量表达式 常量是最简单的表达式。有6种常量,对应于6种数据类型。
F77 要使用缩写来做 逻辑判断: .ge. ---- 英文全称:Greater or Equal ; 意思:大于等于; .gt. ---- 英文全称::Greater Than; 意思:大于 .le. ---- 英文全称:: Less or Equal; 意思:小于等于 .lt. ---- 英文全称: : Less Than; 意思:小于 .eq. ---- 英文全称::Equal ; 意思:等于 .nq. ---- 英文全称:Not Equal ; 意思: 不等于
自选一种常见高级语言为背景,对其进行简化.例如只包括整型常数和其四则运算以及相应的赋值语句,转移语句,条件语句和最简单的输入输出语句等.编制一个包括必要处理阶段(词法分析、语法分析、语义分析、代码生成)简化又完整的编译程序 本课程设计程序是以Fortran语言为基础,并整合了C、C++、VB等一些编译语言的思想,能够实现对integer和real的四则运算以及相应的赋值语句、条件语句和循环语句,其中以递归的思想实现了词法分析、语法分析和语义分析,最终结果使用四元式输出。增加了对注释的分析,并能够实现文件的读入,大大地增强了程序的可用性和效率。美中不足的是程序中没有类型检查、没有布尔表达式的分析,结果只以中间代码(四元式)表示,没有生成目标代码,还有受文件操作的限制分析的程序不支持中文 本设计的开发平台式Microsoft Visual Studio 2008 不过支持vc6.0,请注意打开.cpp文件。谢谢,有什么问题请联系jsjmz@qq.com(QQ:506817493)
声明:本博文翻译自https://www.tutorialspoint.com/fortran/fortran_variables.htm 变量只不过是我们的程序可以操作的存储区域的名称。在fortran语言中,每一个变量都要有其确定的数据类型。 fortran语言的变量名字可以由字母,数字,和下划线组成。 fortran变量的名字遵守下面的约定: 1. 长度不能超过31个字符。 2. 它必须由...
•这是一系列函数的总称,涉及到4个基本函数:ICHAR,CHAR,IACHR和ACHAR函数。 •Fortran 90/95中允许把字符型的值转换成数值型的值(已知字符得到字符在某种字符集中的序号数值),也可把数值型的值转换成字符型的值(已知字符在某种字符集中的序号数值进而得到该位置上的字符)。 •函数ICHAR的作用是根据字符得到
FORTRAN 中,给数组赋值时需要使用斜杠(/)。这是因为在 FORTRAN 中,数组的赋值是通过对数组的元素进行赋值来实现的。斜杠可以用来指定数组元素的下标位置。例如,如果我们有一个一维数组 a,要将其第三个元素赋值为 10,可以使用以下语句: a(3) = 10 也可以使用斜杠来指定数组元素的下标位置: a(/3/) = 10 这样就可以将数组 a 的第三个元素赋值为 10。斜杠的使用可以使代码更加清晰易懂,特别是在对多维数组进行操作时。
唐•苏凯: 如果READ语句在使用完格式描述符后仍剩余变量(变量多于格式),则程序会自动丢弃当前的输入缓冲区,自动建立新的输入缓冲区(不需要READ语句),并在格式中最右边不带重复次数的开始括号处重新开始 而且代码注释里已经写明白了,仔细看 【Fortran】过程设计之一(子例程SUBROUTINE) 张杰989: 您好,请问一下如何把中间变量保存下来,以便接下来调用呢?比如更新状态变量后,把相关应力保存下来 【Fortran】过程设计之一(子例程SUBROUTINE) ShareWofl: 感谢分享,显示接口的部分很有用 【Fortran】过程设计之一(子例程SUBROUTINE) weixin_41376968: 让subroutine中的变量定义为out就好啦 就可以返回给调用程序 use是在module模块下使用的