收藏 分享(赏)

FORTRAN90第七章 字符数据处理.ppt

上传人:kpmy5893 文档编号:7269059 上传时间:2019-05-12 格式:PPT 页数:20 大小:93.50KB
下载 相关 举报
FORTRAN90第七章 字符数据处理.ppt_第1页
第1页 / 共20页
FORTRAN90第七章 字符数据处理.ppt_第2页
第2页 / 共20页
FORTRAN90第七章 字符数据处理.ppt_第3页
第3页 / 共20页
FORTRAN90第七章 字符数据处理.ppt_第4页
第4页 / 共20页
FORTRAN90第七章 字符数据处理.ppt_第5页
第5页 / 共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=“RedSt

2、ar“,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):

3、s1(3),t2(5,6),u(4,5)*8,7.1.3 字符型变量的赋值,格式:字符变量=字符表达式,当字符表达式的长度超过字符变量的长度时字符表达式右边多余字符会丢掉,相反,当字符表达式的长度短于字符变量的长度时则在右边补空格。以字符变量的长度为准。 character(20) s1,s2 s1=“ABCDEFGHHIJKL.“ s2=“1224WEFWE“,还可以将整型表达式赋给字符变量 Character(20) a a=65*256+66;print *,a;End !输出为BA,7.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 sub,7.2.1 字

5、符表达式,7.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 结果为:thiisisaok,7.2.1 字符表达式,8.2 字符型数据运算,两个形状相同的字符型数组的加法运算是将两个数组的对应元素相加(字符串的连接),得到一个新的数组。例如: Character(3),dimension(2):text_1=(/abc,

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

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

8、ine_Help系统。,字符串中连续之部分称为该字符串的子字符串。例: 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)=“1234567

9、890“; A(2)= abcdefghij Print*,A(1:2)(3:5);END 结果为:345cde,可以将一个子串赋给另一个子串,例如: Chrracter str*20 Str=1234567890abcdefghij Str(4:6)=str(11:12) Print*,str End 结果为:123ab7890abcdefghij,Character(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

10、 n = int(25*sin(x)+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;End,7.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

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

12、 30+j-I)=* End do Print*,line End do,下半部(三行)的图形可用下列程序段实现 Do I=3, 1,-1 Line= K=2*I-1 Do J=1,k line(30+j-I: 30+j-I)=* enddo Print*,line End do,程序为: Character*50 line 上半部程序段 下半部程序段 end,例:输入一段文字,找出包含多少个空格,然后将空格删除。,(1)下列子程序是求删除一字符串所有空格后的字符串及其长度: SUBROUTINE SUB(STR,L)CHARACTER*(*)STRinteger pL=LEN(TRIM(ST

13、R)p=1do while(pL)if(str(p:p)/= )thenp=p+1elsestr(p:L-1)=STR(P+1:L)L=L-1END IFEND DO END SUBROUTINE SUB,(2)主程序为: CHARACTER*80 line Integer: m,n=0 Read*,k Do I=1,k Read*,line Call sub(line,m) Print*,line(1:m) N=n+(80-m) End do end,例:输入十个姓名,要求按字母顺序输出,程序为: Parameter(n=10) Character*15 a(n),ch Read*,a Do I=1,n-1P=Ido j=I+1,nif(a(j)a(p)p=j End doch=a(p)a(p)=a(I)a(I)=ch End do,Print*,a end,思考题(上机操作): 输入十个姓名,要求按实际包含的字母个数多少的顺序输出。 提示: (1)编写一子程序,求删除所有空格后的字符串实际包含的字母个数。 (2)定义一整型数组,用来存放每个姓名实际包含的字母个数。 (3)在对整型数组排序的同时,交换字符型数组元素的值。,

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报