Fortran 简明教程

Fortran - Strings

Fortran 语言可以将字符视为单个字符或连续字符串。

The Fortran language can treat characters as single character or contiguous strings.

一个字符串可以只有单个字符长,甚至可以是零长。在 Fortran 中,字符常量是放在一对双引号或单引号中的。

A character string may be only one character in length, or it could even be of zero length. In Fortran, character constants are given between a pair of double or single quotes.

固有数据类型 character 存储字符和字符串。字符串的长度可由 len specifier 指定。如果没有指定长度,则长度为 1。你可以在字符串中按位置来引用单个字符;最左边的字符位于位置 1。

The intrinsic data type character stores characters and strings. The length of the string can be specified by len specifier. If no length is specified, it is 1. You can refer individual characters within a string referring by position; the left most character is at position 1.

String Declaration

字符串的声明与其他变量相同 −

Declaring a string is same as other variables −

type-specifier :: variable_name

例如,

For example,

Character(len = 20) :: firstname, surname

您可以分配值,例如,

you can assign a value like,

character (len = 40) :: name
name = “Zara Ali”

以下示例演示了字符数据类型的声明和使用−

The following example demonstrates declaration and use of character data type −

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

当您编译并执行以上程序时,将生成以下结果——

When you compile and execute the above program it produces the following result −

Here isMr.   Rowan          Atkinson
A big hello from Mr. Bean

String Concatenation

连接操作符 // 连接字符串。

The concatenation operator //, concatenates strings.

以下示例演示了这一点−

The following example demonstrates this −

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

当您编译并执行以上程序时,将生成以下结果——

When you compile and execute the above program it produces the following result −

Here is Mr. Rowan Atkinson
A big hello from Mr. Bean

Extracting Substrings

在 Fortran 中,你可以通过对字符串指定索引来从中提取子字符串,在成对的括号中给出子字符串的开始和结束索引。这称为范围说明符。

In Fortran, you can extract a substring from a string by indexing the string, giving the start and the end index of the substring in a pair of brackets. This is called extent specifier.

以下示例演示如何从字符串“hello world”中提取子字符串“world” −

The following example shows how to extract the substring ‘world’ from the string ‘hello world’ −

program subString

   character(len = 11)::hello
   hello = "Hello World"
   print*, hello(7:11)

end program subString

当您编译并执行以上程序时,将生成以下结果——

When you compile and execute the above program it produces the following result −

World

Example

以下示例使用 date_and_time 函数输出日期和时间字符串。我们使用范围说明符分别提取了年、日期、月、小时、分钟和秒的信息。

The following example uses the date_and_time function to give the date and time string. We use extent specifiers to extract the year, date, month, hour, minutes and second information separately.

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

当你编译并执行上述程序时,它会提供详细的日期和时间信息 −

When you compile and execute the above program, it gives the detailed date and time information −

Date String: 20140803
Year: 2014
Month: 08
Day: 03
Time String: 075835.466
Hour: 07
Minute: 58
Second: 35.466

Trimming Strings

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

The trim function takes a string, and returns the input string after removing all trailing blanks.

Example

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

当您编译并执行以上程序时,将生成以下结果——

When you compile and execute the above program it produces the following result −

Susanne Rizwan      , the beautiful dancer from the east!
 Susanne Rizwan, the beautiful dancer from the east!

Left and Right Adjustment of Strings

函数 adjustl 接受一个字符串,并通过删除前导空格并将它们追加为尾部空格来返回它。

The function adjustl takes a string and returns it by removing the leading blanks and appending them as trailing blanks.

函数 adjustr 接受一个字符串,并通过删除尾部空格并将它们追加为前导空格来返回它。

The function adjustr takes a string and returns it by removing the trailing blanks and appending them as leading blanks.

Example

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

当您编译并执行以上程序时,将生成以下结果——

When you compile and execute the above program it produces the following result −

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

Searching for a Substring in a String

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

The index function takes two strings and checks if the second string is a substring of the first string. If the second argument is a substring of the first argument, then it returns an integer which is the starting index of the second string in the first string, else it returns zero.

Example

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

当您编译并执行以上程序时,将生成以下结果——

When you compile and execute the above program it produces the following result −

test is found at index: 11