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

上传人:牧羊曲112 文档编号:5431277 上传时间:2023-07-06 格式:PPT 页数:20 大小:213.99KB
返回 下载 相关 举报
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页
点击查看更多>>
资源描述

《FORTRAN90第七章字符数据处理.ppt》由会员分享,可在线阅读,更多相关《FORTRAN90第七章字符数据处理.ppt(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,7.1.2 字

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

3、8,7.1.3 字符型变量的赋值,格式:字符变量=字符表达式,当字符表达式的长度超过字符变量的长度时字符表达式右边多余字符会丢掉,相反,当字符表达式的长度短于字符变量的长度时则在右边补空格。以字符变量的长度为准。character(20)s1,s2s1=“ABCDEFGHHIJKL.s2=“1224WEFWE,还可以将整型表达式赋给字符变量Character(20)aa=65*256+66;print*,a;End!输出为BA,7.1.4 字符型变量的输入与输出,用表控格式输入字符型数据时要带定界符,格式化输入时不要带定界符。,用表控格式输出字符型数据时,各字符串依次输出,中间不留空格;如果想

4、要分隔,则应在输出列表中插入选定使用的分隔符。,格式化输出是由格式编辑符控制的。,7.1.5 字符型变量作虚参,字符型变量作过程的虚参时,可定义其为固定长度变量或假定长度变量。一般建议用假定长度变量较好。用固定长度变量时,其实际长度与实参的长度可以相同也可以不同,这可能会导致比较隐蔽的错误,应该引起注意。,Character(20)a,b,c call sub(a,b,c)endSubroutine sub(a,b,c)Character(10)a,b*(*),c*20End subroutine sub,7.2.1 字符表达式,7.2 字符型数据运算,字符型数据的运算符只有字符连接符/一种,

5、也称加法运算,与字符型数据组成字符表达式,将两个字符型数据连接起来。Character*20 c,a*4,b*5a=Thisb=isac=a/b/testc=a(1:3)/b(:2)/c(5:8)/OKPrint*,cEND结果为:thiisisaok,7.2.1 字符表达式,8.2 字符型数据运算,两个形状相同的字符型数组的加法运算是将两个数组的对应元素相加(字符串的连接),得到一个新的数组。例如:Character(3),dimension(2):text_1=(/abc,123/)Character(3),dimension(2):text_2=(/xyz,456/)Print*,tex

6、t_1/text_2End结果为:abcxyz123456,7.2.2 字符型数据的比较,两个字符串可以比较,也可用六种关系运算符:str.GT.char1 str2=a1 st/=name字符串的比较实际上是比较字符的机内码字符关系运算法则:单个字符比较,代码大者为“大”:b a 比较字符串时,如果两个字符串长度不等,则首先用空格把短串尾部补齐,使两字符串 等长;从第1个字符开始依次比较每个字符,字符大者其所在字符串为大;所有字符都相 等的两个字符串相等。,统计字符串长度:LEN(S),7.2.3 处理字符串的系统函数,给出字符串S2在S1中的位置:INDEX(S1,S2)S1,S2为字符串

7、。例: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_Line_Help系统。,字符串中连续之部分称为该字符串的子字符串。例:ORT,RAN P,rog,Program都是字符串FORTRAN Pr

8、ogram的子字符串。,字符串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)=abcdefghijPrint*,A(1:2)(3:5);END结果为:345cde,可以将一个子串赋给另一个子串,例如:Chrracter

9、 str*20Str=1234567890abcdefghijStr(4:6)=str(11:12)Print*,strEnd结果为:123ab7890abcdefghij,Character(80)A;Integer m,nReal:PI=3.14159265,DX,XDX=pi*0.05;X=0;m=int(pi/dx+0.5*dx)+1Do L=1,Mwrite(a,(1X,F4.2)Xn=int(25*sin(x)+40a(40:40)=:;a(n:n)=Sn=int(25*cos(x)+40;a(n:n)=cprint(A),a;x=x+dxEnddo;End,7.4 字符型数据的应

10、用举例,例:用字符串方式输出sin(x)与cos(x)的图像,Character(LEN=80)A,c*1Integer s,eread(A),Ae=LEN(A);s=1do while(s=e)c=A(S:S);A(S:S)=A(E:E);A(E:E)=c e=e-1;s=s+1enddoprint(1X,A),aEnd,例:字符串的逆序串,例:输入50个单词,把以字母A开头的打印出来。Character*15 wordDo I=1,50Read*,wordIf(index(word,A)=1)PRINT*,WORDEND DOEND上式中index(word,A)=1可改为:word(1:

11、1)=A,例:打印下列图形,要求中间一列在30列输出,*,上半部(四行)的图形可用下列程序段实现Do I=1,4Line=K=2*I-1Do J=1,kline(30+j-I:30+j-I)=*End doPrint*,lineEnd do,下半部(三行)的图形可用下列程序段实现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)下列子程序是求删除一字符串所有空格

12、后的字符串及其长度:SUBROUTINE SUB(STR,L)CHARACTER*(*)STRinteger pL=LEN(TRIM(STR)p=1do while(pL)if(str(p:p)/=)then p=p+1elsestr(p:L-1)=STR(P+1: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-1 P=I do j=I+1,n if(a(j)a(p)p=jEnd do ch=a(p)a(p)=a(I)a(I)=chEnd do,Print*,aend,思考题(上机操作):输入十个姓名,要求按实际包含的字母个数多少的顺序输出。提示:(1)编写一子程序,求删除所有空格后的字符串实际包含的字母个数。(2)定义一整型数组,用来存放每个姓名实际包含的字母个数。(3)在对整型数组排序的同时,交换字符型数组元素的值。,

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

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号