FORTRAN90字符数据处理

上传人:宝路 文档编号:47981136 上传时间:2018-07-07 格式:PPT 页数:20 大小:94.28KB
返回 下载 相关 举报
FORTRAN90字符数据处理_第1页
第1页 / 共20页
FORTRAN90字符数据处理_第2页
第2页 / 共20页
FORTRAN90字符数据处理_第3页
第3页 / 共20页
FORTRAN90字符数据处理_第4页
第4页 / 共20页
FORTRAN90字符数据处理_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《FORTRAN90字符数据处理》由会员分享,可在线阅读,更多相关《FORTRAN90字符数据处理(20页珍藏版)》请在金锄头文库上搜索。

1、7 字符数据处理7.1 字符型数据 7.2 字符型数据的运算 7.3 字符子串 7.4 字符型数据的应用举例一个字符在内存中占一个字节。7.1 字符型数据7.1.1 字符型常量 字符型常量是用定界符括起来的一串字符。定 界符可用单引号或双引号,但前后必须一致。7.1.1 字符型常量 字符型符号常量:可用parameter属性给字符 串命名,此名称就是字符型符号常量,因为是常 量,当然不能在程序中给它赋值。 给字符型符号常量时,其长度可用*表示。 Character(20),Parameter: Addr=“Hefei“ Character(*),Parameter: Book=“RedStar

2、“7.1.2 字符型变量字符型变量用于存放字符型常量。必须先定义 定义格式 Character(Len=字符串长度):变量名,变量名7.1.2 字符型变量Len=可以不写,当长度为1时可以连()也没有。 如果变量表中有长度不同于Len=域指定的变 量,可以对它进行个别说明,以个别说明为准。 Character(20):ch1,ch2,ch3*15,ch4*1,ch5*12 Character c1,c2,c3 character(20) s1,s2,s3*3还可以定义字符型数组 character(20) c1(3),c2(5,6),c3(4,5)*8 character(20):s1(3),

3、t2(5,6),u(4,5)*87.1.3 字符型变量的赋值格式:字符变量=字符表达式 当字符表达式的长度超过字符变量的长度时字 符表达式右边多余字符会丢掉,相反,当字符表达 式的长度短于字符变量的长度时则在右边补空 格。以字符变量的长度为准。 character(20) s1,s2 s1=“ABCDEFGHHIJKL.“ s2=“1224WEFWE“ 还可以将整型表达式赋给字符变量 Character(20) a a=65*256+66;print *,a;End !输出为BA7.1.4 字符型变量的输入与输出用表控格式输入字符型数据时要带定界符,格 式化输入时不要带定界符。用表控格式输出字

4、符型数据时,各字符串依次 输出,中间不留空格;如果想要分隔,则应在输出 列表中插入选定使用的分隔符。格式化输出是由格式编辑符控制的。7.1.5 字符型变量作虚参字符型变量作过程的虚参时,可定义其为固定 长度变量或假定长度变量。一般建议用假定长 度变量较好。用固定长度变量时,其实际长度与 实参的长度可以相同也可以不同,这可能会导致 比较隐蔽的错误,应该引起注意。 Character (20) a,b,ccall sub(a,b,c)end Subroutine sub(a,b,c) Character(10) a,b*(*),c*20 End subroutine sub7.2.1 字符表达式7

5、.2 字符型数据运算字符型数据的运算符只有字符连接符/一种, 也称加法运算,与字符型数据组成字符表达式, 将两个字符型数据连接起来。Character *20 c,a*4,b*5 a= “This“ b= “isa“ c=a/b/“ test“ c=a(1:3)/b(:2)/c(5:8)/“OK“ Print *,c END 结果为:thiisisaok7.2.1 字符表达式8.2 字符型数据运算两个形状相同的字符型数组的加法运算是将 两个数组的对应元素相加(字符串的连接),得到 一个新的数组。例如:Character(3),dimension(2):text_1=(/abc,123/) Ch

6、aracter(3),dimension(2):text_2=(/xyz,456/) Print*, text_1/ text_2 End 结果为:abcxyz1234567.2.2 字符型数据的比较 两个字符串可以比较,也可用六种关系运算符: str.GT.char1 str2=a1 st/=name 字符串的比较实际上是比较字符的机内码 字符关系运算法则: 单个字符比较,代码大者为“大”: b a 比较字符串时,如果两个字符串长度不等,则首先用空格把短串尾部补齐,使两字符串等长;从第1个字符开始依次比较每个字符,字符大者其所在字符串为大;所有字符都相等的两个字符串相等。统计字符串长度:LE

7、N(S)7.2.3 处理字符串的系统函数给出字符串S2在S1中的位置:INDEX(S1,S2)S1,S2为字符串。例:INDEX(FORTRAN,TRA)函数值是整数值,此处是4。求ASCII码的对应字符:char(I) I 为ASCII例: CHAR(65) 函数值是A7.2.3 处理字符串的系统函数求字符ASCII码: 如果字符型变量CH的值为 A,则ICHAR(CH) 函数值是65。字符串比较: LGE(C1,C2),LGT(C1,C2), LLE(C1,C2)与LLT(C1,C2) FORTRAN90提供的字符串处理函数比较多, 实际编程时可参考编辑器的On_Line_Help系 统。

8、 字符串中连续之部分称为该字符串的子字符 串。例: ORT, RAN P, rog, Program都 是字符串FORTRAN Program的子字符串。字符串str的子字符串用str(s:e)表示,s与e 为子字符串在原字符串中的起止位置。str(1:5) 表示str 的第1到第5个字符。s的缺省值是1,e的 缺省值是字符串的长度;当se时,子字符串是空 串。7.3 字符子串 7.3.1 字符子串的定义7.3.2 字符子串的引用7.3.3 字符数组的子串字符型数组或数组片段的子串是指其每一个数组元素的子串。 Character(10) A(6) A(1)=“1234567890“; A(2)

9、= abcdefghij Print*,A(1:2)(3:5);END 结果为:345cde可以将一个子串赋给另一个子串,例如:Chrracter str*20Str=1234567890abcdefghijStr(4:6)=str(11:12)Print*,strEnd结果为:123ab7890abcdefghijCharacter(80) A; Integer m,n Real :PI=3.14159265,DX,X DX = pi*0.05;X=0;m = int(pi/dx+0.5*dx)+1 Do L=1,M write(a,(1X,F4.2) X n = int(25*sin(x)

10、+40 a(40:40) = “:“;a(n:n) = S n = int(25*cos(x)+40;a(n:n) = c print (A), a;x = x+dx Enddo;End7.4 字符型数据的应用举例 例:用字符串方式输出sin(x)与cos(x)的图像Character(LEN=80) A,c*1 Integer s,e read (A), A e = LEN(A); s = 1 do while(s = e)c = A(S:S); A(S:S) = A(E:E); A(E:E)=ce = e-1; s = s+1 enddo print (1X,A), a End例:字符串的

11、逆序串例:输入50个单词,把以字母A开头的打印出来。Character*15 wordDo I=1,50Read*,wordIf(index(word,A)=1)PRINT*,WORDEND DOEND上式中index(word,A)=1可改为:word(1:1)=A例:打印下列图形,要求中间一列在30列输出* * * * * * * * * * * * * * * * * * *上半部(四行)的图形可用 下列程序段实现Do I=1,4Line= K=2*I-1Do J=1,kline(30+j-I: 30+j-I)=*End doPrint*,lineEnd do下半部(三行)的图形可 用下

12、列程序段实现Do I=3, 1,-1Line= K=2*I-1Do J=1,kline(30+j-I: 30+j-I)=*enddoPrint*,lineEnd do程序为:Character*50 line上半部程序段下半部程序段end例:输入一段文字,找出包含多少个空格,然后将空格删除。(1)下列子程序是求删除一字符串所 有空格后的字符串及其长度:SUBROUTINE SUB(STR,L)CHARACTER*(*)STRinteger pL=LEN(TRIM(STR)p=1do while(pL)if(str(p:p)/= )thenp=p+1elsestr(p:L-1)=STR(P+1:

13、L)L=L-1END IFEND DOEND SUBROUTINE SUB(2)主程序为:CHARACTER*80 lineInteger: m,n=0Read*,kDo I=1,kRead*,lineCall sub(line,m)Print*,line(1:m)N=n+(80-m)End doend例:输入十个姓名,要求按字母顺序输出程序为:Parameter(n=10)Character*15 a(n),chRead*,aDo I=1,n-1P=Ido j=I+1,nif(a(j)a(p)p=jEnd doch=a(p)a(p)=a(I)a(I)=chEnd doPrint*,aend思考题(上机操作):输入十个姓名,要求按实际包含的字 母个数多少的顺序输出。提示:(1)编写一子程序,求删除所有空格 后的字符串实际包含的字母个数。(2)定义一整型数组,用来存放每个姓 名实际包含的字母个数。(3)在对整型数组排序的同时,交换 字符型数组元素的值。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 高等教育 > 大学课件

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号