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