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_name

Ví dụ,

Character(len = 20) :: firstname, surname

bạ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 hello

Khi 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. Bean

Kế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 hello

Khi 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

Giả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 subString

Khi bạn biên dịch và thực thi chương trình trên, nó tạo ra kết quả sau:

World

Thí 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  datetime

Khi 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.466

Cắ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 trimString

Khi 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 hello

Khi 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. Bean

Tì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 hello

Khi 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