添加链接
link之家
链接快照平台
  • 输入网页链接,自动生成快照
  • 标签化管理网页链接

a)    字符变量

字符常数的一般形式是由一对单引号‘ ’或一对双引号“”限定的一串字符。字符串中的字符,允许是PORTRAN字符集的任意字符,如果系统还支持其它字符,例如汉字、希腊字、化学符号、数学符号,也可引入字符串内,用一对‘ ’或“”界定。

字符型数据除了有类型、种别外,比其它类型还多了一个长度特性,即规定它有几个字符数。字符型说明语句的关键字是CHARACTER,其长度说明方法是紧跟在CHARACTER后面写一对括号,括号内写LEN=字符长度。其一般形式是:

CHARACTER[(LEN=整型字符长度表达式[,KIND=种别值])][,属性说明] :: 变量名表[=初始值]

其中LEN后面的整常数表达式规定被说明字符变量长度,为正整数,LEN的参数与KIND的参数都写在括号内,次序可以任意。在字符型说明语句中,长度说明必须有,不可省略,种别参数可以省略,此时取标准值。仅有关键字CHARACTER而没有括号时认为字符是一个字节长。可以省去LEN=及KTND=,只写参数值,此时字符长度必须写在前面。只有长度说明的语句可分为有括号和无括号两种,例如:

CHARACTER(LEN=12,KIND=1) :: A,B

CHARACTER(KIND=1,LEN=12) :: A,B

CHARACTER(12,1) :: A,B

CHARACTER*12 :: A,B

都是等价的,前者说明X、Y2是字符型变量,种别参数为3.每个变量长度为12。后者说明表明长度为12,种别值为1。

长度也可以写成一个*号,表示长度暂不确定,待以后与程序中实际需要的长度相一致。例如:

CHARACTER(LEN=*),PARAMETER :: C_NAME=‘GIRL’

CHARACTER(LEN=*),PARAMETER :: C_NAME=‘BOY’

都是合法的说明语句,说明字符常量C_NAME,前者长度为4,后者长度为3。

用字符型变量作为过程的哑元时,可以用正整数作长度,也可以把*作长度,后者可以与任何长度的实元作哑实结合,相当于以实元的具体长度为哑元的长度。

CHARACTER后面说明的长度是其后所有实体名的公共长度,如果某一变量的长度与其它不同,可以在其变量名后标出自己的特有长度,方法是在变量名后写上*及长度。例加:

CHARACTER(LEN=12) :: A,B*5,C,D*7,E

b)    字符子串

字符数据中某一部分相连的字符为字符子串,也可以作为一个实体与字符变量一样参加操作。字符子串的一般形式是:V(e1:e2)。V是字符型实体名,包括字符变量名、字符函数名、字符数组元素等等。e1,e2是整型表达式或正整常数,e1的值指明子串在V中的起始列号,e2的值指明子串在V中的终止列号。如果e1省略,表示子串从第一个字符取起;e2省略,表示子串取到末尾;如e1,e2都省略,表示子串从头取到尾。例如:设有字符变量A,其取值为‘ABCDE12345FGH’,则下面的子串取值为:

A(3:11)    -> ‘CDE12345F’,

A(I+4:9)   -> ‘E1234’(I=1),‘1234’(I=2)

A(:5)      -> ‘ABCDE’

A(11:)     -> ‘FGH’

A(:)       -> ‘ABCDE12345FGH’

A(3:3)     -> ‘C’

子串在程序中可直接引用,也可被其它字符实体再赋值,因此可使程序员任意地取出一部分字符,并按需要替换一部分字符,非常灵活。例如:PRINT *,(A(I:I+1),I=6,9),可以打印‘12’、‘23’、‘34’、‘45’。

c)    字符操作与赋值

字符操作符只有一个,称并置符,为两相连的斜杠“//”,其功能是把前后两个字符串拼连在一起。表达式中的操作对象可以是字符变量,字符常数、字符子串、字符函数值、字符数组元素等。例如:‘AB’//‘CDE’的值为‘ABCDE’。C//‘ABC’//A(2:6)//B(1:4)//D是把几个字符串连在一起。

字符赋值语句的一般形式是:字符变量=字符表达式。在字符赋值语句中,要求两边种别值一致,此外还有长度问题。当两边长度不等时,赋值时以左边的字符变量说明长度为准,当右边小于左边时,尾部补空格,否则将右边尾部的多余部分截去。

d)    字符比较

对每种机器,系统都把本机上可以使用的各种字符按先后排列成某种次序,每个字符在排序中有确定的位置,称为排序号。有了排序号,字符之间就可以比较大小及相等与否,组成关系表达式。

各种系统字符排序不一样,同一字符,在不同机上排序值可能不一样。以ASCII码为例,有128个字符,它的第一个字符序号为零,最后一个序号为127。例如A的排序号为65,数码0的排序号为32。序号0~31及序号127的字符称为控制字符,用来控制操作,它们是非打印字符,屏幕上不可见,通常编程时可于忽略。从ASCII码字符集的排序可以看出,小写英文字母排序在大写英文字母之后,它们的序号不同。因此,虽然在书写FORTRAN语句时,大小写字母是等价的,但当进行字符操作和字符比较时必须看成是不同的。

字符作比较实际上是比较它们的序号大小。字符比较的一般形式是两端为字符表达式的关系表达式:<字符表达式><关系操作符><字符表达式>。例如:‘A’<‘B’的比较结果为真,C1//‘CCTV’>=(‘XY’//C2)//C3 式当C1、C2、C3是字符型变量名时是合法的,要先计算两端字符表达式的值,而后比较它们是否满足≥关系。比较的方法随关系操作符而异:

>、<关系操作符

只要两边表达式第一个字符不等就可求得关系表达式的值。如:‘ABC’>‘CDE’,因第一个字符‘A’<‘C’不满足>关系,故表达式的逻辑值为假,后面各位不再比较。如果第一位相等,则对第二位字符作比较得出整个关系表达式值为‘真’或‘假’,如此类推。如果两端字符表达式的值长度不等,则短的一端尾部添空格再按位比较。如:‘ABC12’>‘ABC’,因在ASCII码中‘1’的序号为49,空格的序号为32。故上述关系表达式的值为真。

== 关系操作符

先作第一位比较,如不等,关系表达式值为‘假’,如相等,再比较第二位,一直比较到最后一位都相等(不足添空格),才能得出关系表达式值为真,否则值都为假。如作不等/=比较,只要有一位不等就可得出表达式的值为真,否则一直比较到末位。设有字符型变量名为NAME,其值为‘Einstein’,则关系表达式:

NAME==‘Einstein’               ->   真

NAME==‘Ein’//‘stein’       ->   真

NAME/=‘Ein’//‘Stein’      ->   真

NAME==‘EINSTEIN’              ->   假

e)      字符函数

F90的内部函数中有许多与字符型操作有关的函数供用户使用,可以很方便地进行各种文本编辑。

字符与数值相互转换的函数:ICHAR,CHAR,IACHR,ACHAR

F90允许把字符型的值转换成整型值(已知字符,取字符型的序号数值),也允许把数值型的值转换成字符型的值(已知序号,取它对应的字符)。函数ICHAR的功能是把字符型转换成数值,它的引用方式是:ICHAR(字符实体)。这里自变量的字符实体不一定是单个字符,也可以是字符变量、字符子串、字符数组元素、字符函数值等等以及由它们组成的字符表达式。函数值ICHAR返回字符实体第一个字符的序号值。如果指明要按照ASCII码求它的序号,则本功能的函数名应改写为IACHAR,例如:

print *, ichar(‘A’), ichar(‘A_dog’), ichar(‘A_dog’//‘in_my_room’)

打印的结果是3个数字65(A的序号是65)。

函数CHAR的功能是把一个序号转换成它的字符。它的引用方式是:CHAR(整型数值表达式)。先计算整型表达式的值,再以这个值为序号,返回相应的单个字符,如CHAR(65)的值是‘A’。如果按照ASCII码求它的对应字符,则函数名为ACHAR。函数CHAR可以有两个自变量,此时引用形式为:CHAR(序号值,种别值)。缺省种别值时表示取标准值即ASCII码。

有了字符与数值的转换函数,就可处理字符循环。例如设要连续打印 DIMENSION A,DIMENSION B,…,DIMENSION Z,则程序可写成:

DO I=0,25

PRINT *,‘DIMENSION ’//CHAR(I+6)

END DO

求字符串长度的函数:LEN

函数LEN的功能是求出一个字符实体的长度,引用方式是:LEN(字符实体)。函数值返回一个正整教,为该字符实体的长度(包括尾随空格、中间空格在内)。如:LEN(‘ABCD 12 ’)的值是8(6个字符数加2个空格数)。

不计尾部空格的字符串长度函数:LEN_TRIM

如:LEN_TRIM(‘ABCD 12 ’)的值是7(6个字符数加1个空格数)。

求子串在父串位置的函数:INDEX

函数INDEX的功能找出指定子串在字符串内的指定位置,其引用方式是:INDEX(父串,子串)。函数值返回一个正整数,指明子串在父串中是从第几个字符开始的。父串、子串都可以是各种形式的字符实体。如果第二个字符实体不是第一个字符实体的子串,返回函数值为0。如:INDEX(‘Einstein’,‘s’)的值4。

验证字符串的函数:VERIFY

函数VERIFY的功能确认指定的字符集是否包含了给定字符串中所有的字符,其引用方式是:VERIFY(字符串,字符集)。函数值返回一个正整数,指明字符串中与字符集相异的第一个字符是从左边第几个字符开始的。如果没有相异的字符,则返回函数值为0。如:VERIFY(‘Einstein’,‘instant’)的值为1,VERIFY(‘instant’,‘Einstein’)的值为5,VERIFY(‘Einstein’,‘abcdefghijklmnABCDEFGHIJKLMN’)的值为4。

除去尾部空格函数:TRIM

如:TRIM(‘ABCD 12 ’)//‘34’的值是‘ABCD 1234’。

比较字符大小的函数:LGE、LGT、LLE、LLT

比较字符大小的四个函数都有两个字符型实体作自变量,用来判断它们之间是否满足各种>、<关系的,其函数值是一个逻辑值,满足该不等关系为真,否则为假。它们的引用方式与功能如下:

引用方式

LGE(a1,a2)

a1 是否≥ a2

LGE( A ’,‘ B ) 值为假

LGT(a1,a2)

a1 是否> a2

LGT( A ’,‘ B ) 值为假

LLE(a1,a2)

a1 是否≤ a2

LLE( A ’,‘ B ) 值为真

LLT(a1,a2)

a2 是否< a2

LLT( A ’,‘ B ) 值为真

基础语法: 一:常用变量和常量,符号等 Fortran 的数据类型有整数(integer),浮点数(real),复数(complex),字符( character ),逻辑判断(logical) 1.1 接下来就看怎么声明使用这些数据类型的 integer a !这是声明一个名字为a的整形变量 integer,parameter ::N=300 !这里的parameter表明这个变量是个常量,而且上一行声明的变量是不能直接赋值的,但是我们加个::之后就可以赋值了 integer(kind=4)a !这里的ki OpenMP (Open Multi-Processing) 是一种用于并行 编程 的应用程序接口 (API),它针对共享内存多 处理 器系统的并行计算进行了优化。它是一个可移植、可伸缩的并行 编程 模型,可以在多个平台上运行,包括计算机集群和大型超级计算机。OpenMP 是一个开放的标准,由一组 C、C++ 和 Fortran 编译指令组成,这些指令可以在编写串行代码的同时进行并行化,从而实现更高的程序性能。通过将代码分解为多个线程,OpenMP 可以使多个 处理 器同时 处理 问题,从而缩短了计算时间。 1、文件读写操作,对于用户来讲按照文件类型可以分为文本文件和二进制文件两种,在使用OPEN或者WRITE函数进行读写时首先要明确的是要操作的文件的类型,另外 FORTRAN 可以按顺序读写,同样可以直接读写,直接读写类似于我们用CD机听音乐时可以直接跳到我们要听的部分。读写函数一OPEN函数为例:open(unit=fileid, file=filename, access="direct",recl... 整型-&gt;字符型!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!integer          :: intYear character (len=4) :: txtYearintYear = 1998write(txtYear,"(I4)") intYearwrite(*,*) txtYearend!!!!!!!!... 数据类型是指在计算机中能够记录文本、数值等的数据单位。算法 处理 的对象是数据,而数据是以某种特定的形式(如整数、实数、字符等形式)存在的。不同的数据之间往往还存在某些联系,例如由若干个整数组成一个整数数组。 1. 变量声明 隐式声明(不再使用) 隐式声明是传统 Fortran 语言预先定义且无须通过类型声明语句对变量类型进行定义,习惯称为I-N规则。 Fortran 规定,凡以字母I、J、K、L、M、N(无论大写还是 小写)6个字母开头的变量名,如无另外说明则为整型变量。以其他字母开头的变量被默认为 声明:本文翻译自:https://www.tutorialspoint.com/ fortran / fortran _strings.htm 由于这一节内容与上节内容多有重复,所以重复的部分本文不再累赘。 1. 字符串 声明 character (len=20) :: str = &quot;hello, world!&quot; 2. 提取子 字符串 fortran 中,可以通过下标提取子 字符串 。 Program subS... contains()判断一个 字符串 中是否包含某个 字符串 starsWith()判断一个 字符串 中是否以某个 字符串 开始 endsWith()判断一个 字符串 中是否以某个 字符串 结尾 var s = "hello world!";s.starsWith("hello"); //true s.endWith("!"); //true s.contains("o"); //true 首先简单说一下,为什么我会想到这个话题。主要有这么几方面的原因。 当我试图回过头去总结大学在计算机专业所学习的一些理论和知识的时候。发现,在学校里面学习的一些东西,走了两个极端。 一个极端是偏向了细节。比如我们学习的那些《***程序设计》的课程。看这几门课的名称的我们能够很明显的看出,***是一个形容词定语,用来修饰主题“程序设计”。但是,你却非常意外的意识到《C++面向对象程序设计》和 index/scan 寻找指定字符的在 字符串 出现的位置 verify 第一个非指定字符在 字符串 出现的位置 adjustl 移动 字符串 左对齐,去掉打头的空格 adjustr 移动 字符串 ... char *language[]={" FORTRAN ","BASIC","PASCAL","JAVA","C"}; 那么表达式*language[1]>*language[3]比较的是子符B和字符J。 这种情况下的比较是比较各个字符转换成ASCII码之后的大小,且只比较单个字符的大小,从首元素开始,一旦分出大小,后面的字符就不再比较,比较结束。 1、如果想要合并的 字符串 在一个序列或可迭代对象中,那么将它们合并起来的最快方法就是使用join()方法 parts = ['Is', 'Chicago', 'Not', 'Chicago?'] ' '.join(parts) Out[3]: 'Is Chicago Not Chicago?' ','.join(parts) Out[4]: 'Is,Chic... Fortran 分割 字符串 字符串 替换的子程序 !============================================================= subroutine StringSplit(InStr,delimiter,StrArray,nsize) !---------------------------------------------- !---将 字符串