fortran教程6:字符串


Fortran系列:

字符串拼接和切片

fortran中,字符可以用单引号或者双引号表示,通过character声明时,可以通过len()函数指定字符串的最大长度,这些都是早在介绍fortran类型时就已经提到过的。

如果用数组的角度理解,字符串就是由字符组成是数组,所以可通过(:)语法进行索引。此外,通过//运算符可以对字符串进行拼接。

program tinycool
implicit none
   character(len = 15) :: surname, firstname 
   character(len = 30):: name
   
   firstname = 'tiny' 
   surname = 'cool'
   
   name = firstname//surname
   print *, name
   print *, name(:5)
end program tinycool

结果为

>a.exe
 tiny           cool
 tiny

trim去除空格

上面输出的name中间出现了冗长的空格,这是因为surname的长度是15,但只有4个可见字符,剩下的就都用空格补全了,这太难受了,通过trim函数可以去除这个东西

program tinycool
implicit none
   character(len = 15) :: surname, firstname 
   character(len = 30):: name
   
   firstname = 'tiny' 
   surname = 'cool'
   
   name = trim(firstname)//surname
   print *, name
   print *, name(:5)
end program tinycool

结果为

>a.exe
 tinycool
 tinyc

对齐

由于字符串规定的长度往往大于可见字符的长度,所以可见字符的位置就有很大的活动空间。通过adjustladjustr可以让字符居左或者居右

program tinycool
implicit none
   character(len = 15) :: surname, firstname 
   character(len = 30):: name
   
   firstname = 'tiny' 
   surname = 'cool'
   
   name = adjustl(firstname)//adjustr(surname)
   print *, name
   name = adjustr(firstname)//adjustl(surname)
   print *, name

end program tinycool

效果如下

>a.exe
 tiny                      cool
            tinycool

查询和索引

通过index函数,可以在一个字符串中找到另一个字符串所在的位置,如果返回值为0,代表不存在

program tinycool
implicit none
   character(len = 15) :: surname, firstname 
   character(len = 30):: name
   
   firstname = 'tiny' 
   surname = 'cool'
   
   name = trim(firstname)//surname
   
   if(index(name, trim(surname)) == 0)then
      print *, 'test is not found'
   else
      print *, 'test is found at index: ', index(name, trim(surname))
   end if
end program tinycool

结果为

>a.exe
 test is found at index:            5

格式转换

字符虽然看上去和数字没什么关系,但其编码过程仍然需要与数字进行意义对应,fortran中提供了ASCII码的转换函数

  • ACHAR(n) 将ASCII转为字符, n = 0 , 1 , ⋯   , 127 n=0,1,\cdots,127 n=0,1,,127
  • CHAR(n) 将ASCII转为字符, n = 0 , 1 , ⋯   , 255 n=0,1,\cdots,255 n=0,1,,255
  • IACHAR(c) 将字符c转为ASCII,范围是 0 , 1 , ⋯   , 127 0,1,\cdots,127 0,1,,127
  • ICHAR(c) 将字符c转为ASCII,范围是 0 , 1 , ⋯   , 255 0,1,\cdots,255 0,1,,255

此外,还提供了基于ASCII对字符串进行比较的函数

真值条件真值条件
GE(s1,s2) s 1 ⩾ s 2 s_1\geqslant s_2 s1s2LGT(s1,s2) s 1 > s 2 s_1>s_2 s1>s2
LLE(s1,s2) s 1 ⩽ s 2 s_1\leqslant s_2 s1s2LLT(s1,s2) s 1 < s 2 s_1<s_2 s1<s2
  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

微小冷

请我喝杯咖啡

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值