Fortran - Chuỗi
Ngôn ngữ Fortran có thể coi các ký tự là ký tự đơn hoặc các chuỗi liền nhau.
Một chuỗi ký tự có thể chỉ dài một ký tự hoặc thậm chí có thể có độ dài bằng không. Trong Fortran, hằng số ký tự được đưa ra giữa một cặp dấu ngoặc kép hoặc đơn.
Kiểu dữ liệu nội tại characterlưu trữ các ký tự và chuỗi ký tự. Độ dài của chuỗi có thể được chỉ định bởilen specifier. Nếu không có độ dài nào được chỉ định, nó là 1. Bạn có thể tham chiếu các ký tự riêng lẻ trong một chuỗi tham chiếu theo vị trí; ký tự bên trái nhất ở vị trí 1.
Khai báo chuỗi
Khai báo một chuỗi cũng giống như các biến khác -
type-specifier :: variable_nameVí dụ,
Character(len = 20) :: firstname, surnamebạn có thể gán một giá trị như,
character (len = 40) :: name  
name = “Zara Ali”Ví dụ sau minh họa việc khai báo và sử dụng kiểu dữ liệu ký tự:
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 helloKhi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:
Here isMr.   Rowan          Atkinson       
A big hello from Mr. BeanKết nối chuỗi
Toán tử nối //, nối các chuỗi.
Ví dụ sau đây chứng minh điều này -
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 helloKhi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:
Here is Mr. Rowan Atkinson       
A big hello from Mr. BeanGiải nén chuỗi con
Trong Fortran, bạn có thể trích xuất một chuỗi con từ một chuỗi bằng cách lập chỉ mục chuỗi, cho chỉ số bắt đầu và kết thúc của chuỗi con trong một cặp dấu ngoặc. Đây được gọi là thông số mức độ.
Ví dụ sau cho thấy cách trích xuất chuỗi con 'world' từ chuỗi 'hello world' -
program subString
   character(len = 11)::hello
   hello = "Hello World"
   print*, hello(7:11)
   
end program subStringKhi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:
WorldThí dụ
Ví dụ sau sử dụng date_and_timehàm cung cấp chuỗi ngày và giờ. Chúng tôi sử dụng các chỉ định mức độ để trích xuất năm, ngày, tháng, giờ, phút và thông tin thứ hai một cách riêng biệt.
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  datetimeKhi bạn biên dịch và thực thi chương trình trên, nó sẽ cung cấp thông tin ngày và giờ chi tiết -
Date String: 20140803
Year: 2014
Month: 08
Day: 03
Time String: 075835.466
Hour: 07
Minute: 58
Second: 35.466Cắt tỉa chuỗi
Các trim hàm nhận một chuỗi và trả về chuỗi đầu vào sau khi loại bỏ tất cả các khoảng trống ở cuối.
Thí dụ
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 trimStringKhi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:
Susanne Rizwan      , the beautiful dancer from the east!
 Susanne Rizwan, the beautiful dancer from the east!Điều chỉnh trái và phải của chuỗi
Chức năng adjustl lấy một chuỗi và trả về nó bằng cách loại bỏ các khoảng trống ở đầu và nối chúng dưới dạng các khoảng trống ở cuối.
Chức năng adjustr lấy một chuỗi và trả về nó bằng cách loại bỏ các khoảng trống ở cuối và nối chúng dưới dạng các khoảng trống ở đầu.
Thí dụ
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 helloKhi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:
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. BeanTìm kiếm một chuỗi con trong một chuỗi
Hàm chỉ mục nhận hai chuỗi và kiểm tra xem chuỗi thứ hai có phải là chuỗi con của chuỗi đầu tiên hay không. Nếu đối số thứ hai là chuỗi con của đối số đầu tiên, thì nó trả về một số nguyên là chỉ số bắt đầu của chuỗi thứ hai trong chuỗi đầu tiên, nếu không nó trả về số không.
Thí dụ
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 helloKhi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:
test is found at index: 11