Fortran - 字符串

  • 简述

    Fortran 语言可以将字符视为单个字符或连续字符串。
    一个字符串可能只有一个字符的长度,甚至可以是零长度。在 Fortran 中,字符常量在一对双引号或单引号之间给出。
    内在数据类型character存储字符和字符串。字符串的长度可以通过len specifier. 如果未指定长度,则为 1。您可以通过位置引用字符串中的单个字符;最左边的字符在位置 1。
  • 字符串声明

    声明一个字符串与其他变量相同 -
    
    type-specifier :: variable_name
    
    例如,
    
    Character(len = 20) :: firstname, surname
    
    您可以分配一个值,例如,
    
    character (len = 40) :: name  
    name = “Alex Moo”
    
    以下示例演示了字符数据类型的声明和使用 -
    
    program hello
    implicit none
       character(len = 15) :: surname, firstname 
       character(len = 6) :: title 
       character(len = 25)::greetings
       
       title = 'Mr.' 
       firstname = 'Rowan' 
       surname = 'Atkinson'
       greetings = 'A big hello from Mr. Beans'
       
       print *, 'Here is', title, firstname, surname
       print *, greetings
       
    end program hello
    
    当您编译并执行上述程序时,它会产生以下结果 -
    
    Here isMr.   Rowan          Atkinson       
    A big hello from Mr. Bean
    
  • 字符串连接

    连接运算符 // 连接字符串。
    以下示例演示了一点 -
    
    program hello
    implicit none
       character(len = 15) :: surname, firstname 
       character(len = 6) :: title 
       character(len = 40):: name
       character(len = 25)::greetings
       
       title = 'Mr.' 
       firstname = 'Rowan' 
       surname = 'Atkinson'
       
       name = title//firstname//surname
       greetings = 'A big hello from Mr. Beans'
       
       print *, 'Here is', name
       print *, greetings
       
    end program hello
    
    当您编译并执行上述程序时,它会产生以下结果 -
    
    Here is Mr. Rowan Atkinson       
    A big hello from Mr. Bean
    
  • 提取子串

    在 Fortran 中,您可以通过对字符串进行索引来从字符串中提取子字符串,并在一对括号中给出子字符串的开始和结束索引。称为范围说明符。
    下面的例子展示了如何从字符串 'hello world' 中提取子字符串 'world' -
    
    program subString
       character(len = 11)::hello
       hello = "Hello World"
       print*, hello(7:11)
       
    end program subString 
    
    当您编译并执行上述程序时,它会产生以下结果 -
    
    World
    

    例子

    以下示例使用date_and_time函数给出日期和时间字符串。我们使用范围说明符来分别提取年、日、月、时、分和秒信息。
    
    program  datetime
    implicit none
       character(len = 8) :: dateinfo ! ccyymmdd
       character(len = 4) :: year, month*2, day*2
       character(len = 10) :: timeinfo ! hhmmss.sss
       character(len = 2)  :: hour, minute, second*6
       call  date_and_time(dateinfo, timeinfo)
       !  let’s break dateinfo into year, month and day.
       !  dateinfo has a form of ccyymmdd, where cc = century, yy = year
       !  mm = month and dd = day
       year  = dateinfo(1:4)
       month = dateinfo(5:6)
       day   = dateinfo(7:8)
       print*, 'Date String:', dateinfo
       print*, 'Year:', year
       print *,'Month:', month
       print *,'Day:', day
       !  let’s break timeinfo into hour, minute and second.
       !  timeinfo has a form of hhmmss.sss, where h = hour, m = minute
       !  and s = second
       hour   = timeinfo(1:2)
       minute = timeinfo(3:4)
       second = timeinfo(5:10)
       print*, 'Time String:', timeinfo
       print*, 'Hour:', hour
       print*, 'Minute:', minute
       print*, 'Second:', second   
       
    end program  datetime
    
    当您编译并执行上述程序时,它会提供详细的日期和时间信息 -
    
    Date String: 20140803
    Year: 2014
    Month: 08
    Day: 03
    Time String: 075835.466
    Hour: 07
    Minute: 58
    Second: 35.466
    
  • 修剪字符串

    trim函数接受一个字符串,并在删除所有尾随空格后返回输入字符串。

    例子

    
    program trimString
    implicit none
       character (len = *), parameter :: fname="Susanne", sname="Rizwan"
       character (len = 20) :: fullname 
       
       fullname = fname//" "//sname !concatenating the strings
       
       print*,fullname,", the beautiful dancer from the east!"
       print*,trim(fullname),", the beautiful dancer from the east!"
       
    end program trimString
    
    当您编译并执行上述程序时,它会产生以下结果 -
    
    Susanne Rizwan      , the beautiful dancer from the east!
     Susanne Rizwan, the beautiful dancer from the east!
    
  • 字符串左右调整

    功能adjustl接受一个字符串并通过删除前导空格并将它们作为尾随空格附加来返回它。
    功能adjustr接受一个字符串并通过删除尾随空格并将它们附加为前导空格来返回它。

    例子

    
    program hello
    implicit none
       character(len = 15) :: surname, firstname 
       character(len = 6) :: title 
       character(len = 40):: name
       character(len = 25):: greetings
       
       title = 'Mr. ' 
       firstname = 'Rowan' 
       surname = 'Atkinson'
       greetings = 'A big hello from Mr. Beans'
       
       name = adjustl(title)//adjustl(firstname)//adjustl(surname)
       print *, 'Here is', name
       print *, greetings
       
       name = adjustr(title)//adjustr(firstname)//adjustr(surname)
       print *, 'Here is', name
       print *, greetings
       
       name = trim(title)//trim(firstname)//trim(surname)
       print *, 'Here is', name
       print *, greetings
       
    end program hello
    
    当您编译并执行上述程序时,它会产生以下结果 -
    
    Here is Mr. Rowan  Atkinson           
    A big hello from Mr. Bean
    Here is Mr. Rowan Atkinson    
    A big hello from Mr. Bean
    Here is Mr.RowanAtkinson                        
    A big hello from Mr. Bean
    
  • 在字符串中搜索子字符串

    index 函数接受两个字符串并检查第二个字符串是否是第一个字符串的子字符串。如果第二个参数是第一个参数的子字符串,则返回一个整数,该整数是第一个字符串中第二个字符串的起始索引,否则返回零。

    例子

    
    program hello
    implicit none
       character(len=30) :: myString
       character(len=10) :: testString
       
       myString = 'This is a test'
       testString = 'test'
       
       if(index(myString, testString) == 0)then
          print *, 'test is not found'
       else
          print *, 'test is found at index: ', index(myString, testString)
       end if
       
    end program hello
    
    当您编译并执行上述程序时,它会产生以下结果 -
    
    test is found at index: 11