Fortran - สตริง

ภาษา Fortran สามารถถือว่าอักขระเป็นอักขระเดี่ยวหรือสตริงที่ต่อเนื่องกัน

สตริงอักขระอาจมีความยาวได้เพียงอักขระเดียวหรืออาจมีความยาวเป็นศูนย์ก็ได้ ใน Fortran ค่าคงที่ของอักขระจะได้รับระหว่างคู่ของเครื่องหมายคำพูดคู่หรือเดี่ยว

ชนิดข้อมูลที่แท้จริง characterเก็บอักขระและสตริง ความยาวของสตริงสามารถระบุได้โดยlen specifier. หากไม่มีการระบุความยาวก็คือ 1. คุณสามารถอ้างถึงอักขระแต่ละตัวภายในสตริงที่อ้างอิงตามตำแหน่ง อักขระทางซ้ายสุดอยู่ที่ตำแหน่ง 1

การประกาศสตริง

การประกาศสตริงจะเหมือนกับตัวแปรอื่น ๆ -

type-specifier :: variable_name

ตัวอย่างเช่น,

Character(len = 20) :: firstname, surname

คุณสามารถกำหนดค่าเช่น

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

ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการประกาศและการใช้ชนิดข้อมูลอักขระ -

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 คุณสามารถแยกสตริงย่อยออกจากสตริงได้โดยการสร้างดัชนีสตริงโดยให้จุดเริ่มต้นและดัชนีสิ้นสุดของสตริงย่อยในวงเล็บคู่หนึ่ง สิ่งนี้เรียกว่าตัวระบุขอบเขต

ตัวอย่างต่อไปนี้แสดงวิธีแยกสตริงย่อย 'world' ออกจากสตริง 'hello 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

การค้นหา Substring ใน String

ฟังก์ชันดัชนีรับสองสตริงและตรวจสอบว่าสตริงที่สองเป็นสตริงย่อยของสตริงแรกหรือไม่ ถ้าอาร์กิวเมนต์ที่สองเป็นสตริงย่อยของอาร์กิวเมนต์แรกจะส่งกลับจำนวนเต็มซึ่งเป็นดัชนีเริ่มต้นของสตริงที่สองในสตริงแรกมิฉะนั้นจะส่งกลับค่าศูนย์

ตัวอย่าง

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