`
chemingliang
  • 浏览: 134104 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

fortran 字符型 与 整型 之间的转换【转】

阅读更多

整型->字符型
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
integer          :: intYear
character(len=4) :: txtYear
intYear = 1998
write(txtYear,"(I4)") intYear
write(*,*) txtYear
end
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
注意,
write(txtYear,"(I4)") intYear 
中,txtYear为字符型。fortran将字符型变量txtYear看作一个文件,将数据intYear写入这个文件。

字符型->整型(下面的写法是错误的!)
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
integer          :: intYear
character(len=4) :: txtYear
txtYear = 1998
write(intYear,"(A4)") txtYear
write(*,*) iniYear
end
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
上面的写法错在:
intYear是整型变量,初始值为0,write将寻找unit=0的文件,结果找不到,报错!!!
这就是说,使用write进行类型转换时,只能进行整型->字符型的转换。要想将字符型转换到整型,要用到read命令:
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
integer          :: intYear
character(len=4) :: txtYear
txtYear = 1998
read(txtYear,"(I4)") iniYear
!read(txtYear(1:4),"(I4)") iniYear
write(*,*) iniYear
end
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
这种方法仍然以txtYear为文件,将其中的1998以整型读出。
read(txtYear(1:4),"(I4)") iniYear
可以将字符串中任意数据(第一到第四个字符之间的子串,包括第一和第四个字符)读出来!

试一试这种方法:
write(string, 'I3.3') intnumber
看一看他与
write(string, 'I3') intnumber
有什么区别!

另外,看一看下面地代码是什么意思:
CHARACTER*5 string1
intnumber=45
string1="(I??)"
WRITE(string1(3:4),"(I2.2)")int(log10(real(INTNUMBER))+1)
WRITE(*,string1)INTNUMBER

这个也很好:
write (string,*) intnumber
string = trim(adjustl(trim(string)))

Fortran中的字符串函数:
ichar(c):将一个字符转化为对应的序号,按处理器整理顺序排列,括号内也可以是字符串,但是只处理第一个字符
iachar(c):将一个字符转化为ascii码值,这是为非ascii平台提供的转化到ascii码值的函数
 在ascii平台上,这两个函数等效的。

char(n)   :将一个整数值转化为字符,按处理器顺序排列
achar(n) :将一个整数转化为字符,按ascii码顺序排列
char(n,kind),我还是不十分明确

-----------------
adjustL(s) :将字符串前面的空格挪到后面,字符串中间的空格不动,总字符串长度不变
adjustR(s) :字符串右对齐,字符串长度不变


-------------------
len(s)  :求字符串长度函数
len_trim(s)   :不计算字符串尾部空格长度

------------------
trim(s)  :去除字符串尾部空格

------------------
index(s1,s2[,back])  :s2在s1中的起始位置,如果s2不是s1的子串,返回0,如果s2为''(空字符串),返回1。back=.true.时表示如果s2在s1中出现多次,按照最后一次出现的位置计算,如果省略或者back=.fasle.,则均按s2第一次出现的位置计算。例子:
s1='**123**23567'
index(s1,'23')      值为4
index(s1,'23',back=.true.)   值为8
(使用的是digital visual fortran 6.0,帮助中有
INDEX ('XXXX', " ", BACK = .TRUE.) 值为5 
但是在其环境下测试,并非如此,仍然是0,不知道是否帮助文件的问题,还是其他原因。)

-----------------------
scan(s1,s2[,back]) :扫描s1中的每个字符判断是否包含于s2字符集中,并返回s1中第一个能够包含在s2中的字符位置,如果设置了back=.true.,则返回s1中从右面开始第一个包含于s2字符串中的字符位置。如果没有包含于s2字符集的字符,则返回0。例如:
s1='**123**23567'
scan(s1,'32')       ! =4,s1中的'2'和'3'都属于'32'字符集,但是在s1中,第一个出现属于s2字符的是第4位置上的'2',所以返回4
scan(a1,'32', BACK = .TRUE.)   !=9,从字符串s1右边开始计算,则3是第一个包含于'32'字符集的字符,位置数是9

verify(s1,s2[,back]) :与scan类似,但是判断是否有不包含于字符集的字符并返回其位置,back同样类似是表示从字符串右边开始寻找。具体就是判断s1中的每个字符是否有没有包含于s2字符集中的,如果存在则返回其在s1中的位置,否则返回0值。如果设置back=.true.,则从s1最右侧的字符开始判断。如果s1中的字符全部属于s2字符集,则返回0。例如
s1='**123**23567'
verify(s1,'32')      ! =1,因为s1中的第一个字符'*'就不属于'32'字符集,所以函数返回1
verify(s1,'32',back=.true.)   ! =12,从s1右面第一个字符开始检查,'7'不属于'32'字符集,所以返回'7'的位置12
verify(s1,'1234567*')   ! =0,s1中的字符全部包含在s2字符集中

-----------------
repeat(s1,n)  :将字符串s1重复N遍,n>=0
LGE(s1,s2)  :s1是否>=s2
LGT(s1,s2)  :s1是否>s2
LLT(s1,s2)   :s1是否LLE(s1,s2)   :s1是否<=s2
字符串等于仍然用.EQ.

 

 

转载:http://blog.163.com/niu_yingli/blog/static/237423852007464111970/

分享到:
评论

相关推荐

    FORTRAN语言自学基础

    4. **字符型数据**: - 字符常量用单撇号括起,字符变量需先定义,可以用`CHARACTER`或`IMPLICIT`语句。 - 字符关系表达式用于字符比较,产生逻辑值。 - 字符串的子字符串可以通过索引表示,可参与输入输出操作。...

    Fortran77的教程

    3. **数据类型**:Fortran77支持的基本数据类型有实型(REAL)、整型(INTEGER)、字符型(CHARACTER)和逻辑型(LOGICAL)。其中,实型用于表示浮点数,整型用于整数,字符型用于字符串,逻辑型用于布尔值。 4. **...

    fortran程序设计课后习题答案

    Fortran支持多种数据类型,包括实型、整型、字符型等,习题可能涵盖不同类型之间的转换和操作。同时,数组是Fortran编程中常用的结构,习题会涉及一维、二维甚至多维数组的声明、初始化和操作,包括矩阵运算和数组...

    适合小白入门的Fortran中文教程学习

    1. 变量与数据类型:Fortran支持各种基本数据类型,包括实型(REAL)、整型(INTEGER)、字符型(CHARACTER)和逻辑型(LOGICAL)。变量声明通常在程序的开头,如`REAL :: x, y`声明两个实型变量x和y。 2. 控制流:...

    Fortran77结构化程序设计

    变量类型决定了该变量可以存储的数据类型,常见的有整型(integer)、实型(real)、双精度型(doubleprecision)、复型(complex)、逻辑型(logical)和字符型(character)。 算术表达式中涉及的算术运算符包括...

    fortran英文教程

    Fortran 90 提供了丰富的数据类型支持,包括整型、实型、双精度、字符型、逻辑型和复数型等。 ##### 3.1 常量 - **整型**:用于存储整数值,例如 `INTEGER :: i = 10`。 - **实型**:用于存储浮点数值,例如 `REAL...

    FORtran基本环境及其安装教程

    FORTRAN支持多种数据类型,包括实型(REAL)、整型(INTEGER)、字符型(CHARACTER)等。在这一讲中,会学习如何声明和初始化变量,以及不同类型之间的转换。此外,FORTRAN的格式化输入输出( formatted I/O)是其...

    fortran标准函数库

    Fortran标准函数库包含了大量用于处理数学计算、字符串操作等功能的强大工具。本文将深入探讨Fortran标准函数库中的部分核心函数及其应用场景。 #### 二、数值与类型转换函数 ##### 1. ABS(x) - **功能**:求x的...

    FORTRAN95语法入门

    FORTRAN95是FORTRAN语言的一个版本,它在1997年发布,旨在提供一个更加现代化、易读且高效的语言标准,同时保持与早期FORTRAN版本的向后兼容性。FORTRAN,全称为“公式翻译”(Formula Translation),自1957年首次...

    CFortranTranslator:从Fortran到C ++的翻译器.zip

    1. **Fortran基础知识**:理解Fortran的基本语法和数据类型,包括实型、整型、字符型等,以及数组、子程序、模块等结构。 2. **C++基础知识**:熟悉C++的对象导向编程概念,如类、对象、继承、多态和模板,以及C++...

    fortran语法.docx

    3. **字符型(Character)**:字符型变量用于存储字符和字符串。`kind`在字符型中表示编码,通常为ASCII编码。例如,`character(kind=1)`代表ASCII编码的单个字符。 4. **复数型(Complex)**:复数由两个实数部分...

    02A-IDL语法基础:IDL简介、数据类型、常量、变量及数据转换1

    IDL支持多种数据类型,包括基本类型如整型(INTEGER)、浮点型(FLOAT/DOUBLE)、字符串(STRING)和布尔型(BOOLEAN),以及数组和矩阵类型。常量在IDL中用于表示不变的数值,如数值常量、字符串常量和空值常量。...

    fortran90简易教程.pdf

    - 在赋值时,如果所赋的值与变量类型不一致,则会自动进行类型转换。 - 调用子程序时,参数类型必须匹配。 #### 四、常量 - **数字常量**: - 整数型:如`11000`。 - 实数型:如`1.0`或使用科学计数法如`1e3`...

    彭国伦的fortran95程序设计习题程序代码

    2. **数据类型**:Fortran95支持多种数据类型,包括整型(INTEGER)、实型(REAL)、双精度实型(DOUBLE PRECISION)、字符型(CHARACTER)和逻辑型(LOGICAL)。学习者可以通过解决习题来了解每种类型的应用场景和...

    Fortran语言的原理和运用

    此外,还有字符型(CHARACTER)和数组(ARRAY),支持多维数组。 3. **控制结构**:Fortran支持条件语句(IF-THEN-ELSE)、循环(DO)、选择结构(SELECT CASE)等控制流语句。同时,Fortran 90及以上版本引入了...

    An introduction to programming in Fortran 90

    在数据类型方面,文档详细介绍了各种常量类型,包括整型、实型、双精度型、字符型、逻辑型以及复数型。变量的使用也被涉及,包括变量的定义、变量类型转换等内容。 接着,文档讲解了如何编写、处理和运行程序。这...

Global site tag (gtag.js) - Google Analytics