Fortran - ตัวละคร
ภาษา Fortran สามารถถือว่าอักขระเป็นอักขระเดี่ยวหรือสตริงที่ต่อเนื่องกัน
อักขระอาจเป็นสัญลักษณ์ใด ๆ ที่นำมาจากชุดอักขระพื้นฐานเช่นจากตัวอักษรตัวเลขทศนิยมขีดล่างและอักขระพิเศษ 21 ตัว
ค่าคงที่ของอักขระคือสตริงอักขระที่มีค่าคงที่
ชนิดข้อมูลที่แท้จริง characterเก็บอักขระและสตริง ความยาวของสตริงสามารถระบุได้โดยlenตัวระบุ หากไม่มีการระบุความยาวก็คือ 1. คุณสามารถอ้างถึงอักขระแต่ละตัวภายในสตริงที่อ้างอิงตามตำแหน่ง อักขระทางซ้ายสุดอยู่ที่ตำแหน่ง 1
การประกาศตัวละคร
การประกาศข้อมูลประเภทอักขระจะเหมือนกับตัวแปรอื่น ๆ -
type-specifier :: variable_name
ตัวอย่างเช่น,
character :: reply, sex
คุณสามารถกำหนดค่าเช่น
reply = ‘N’
sex = ‘F’
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการประกาศและการใช้ชนิดข้อมูลอักขระ -
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. Bean'
print *, 'Here is ', title, firstname, surname
print *, greetings
end program hello
เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นจะให้ผลลัพธ์ดังต่อไปนี้ -
Here is Mr. 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. Bean'
print *, 'Here is ', name
print *, greetings
end program hello
เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นจะให้ผลลัพธ์ดังต่อไปนี้ -
Here is Mr.Rowan Atkinson
A big hello from Mr.Bean
ฟังก์ชั่นตัวละครบางอย่าง
ตารางต่อไปนี้แสดงฟังก์ชันอักขระที่ใช้บ่อยพร้อมกับคำอธิบาย -
ซีเนียร์ No | ฟังก์ชั่นและคำอธิบาย |
---|---|
1 | len(string) ส่งกลับความยาวของสตริงอักขระ |
2 | index(string,sustring) มันกำหนดตำแหน่งของสตริงย่อยในสตริงอื่นส่งคืน 0 หากไม่พบ |
3 | achar(int) จะแปลงจำนวนเต็มเป็นอักขระ |
4 | iachar(c) มันแปลงอักขระเป็นจำนวนเต็ม |
5 | trim(string) ส่งคืนสตริงโดยลบช่องว่างต่อท้ายออก |
6 | scan(string, chars) โดยจะค้นหา "สตริง" จากซ้ายไปขวา (ยกเว้น back = .true.) สำหรับการเกิดครั้งแรกของอักขระใด ๆ ที่อยู่ใน "ตัวอักษร" จะส่งคืนจำนวนเต็มที่ให้ตำแหน่งของอักขระนั้นหรือเป็นศูนย์หากไม่พบอักขระใดใน "ตัวอักษร" |
7 | verify(string, chars) มันจะสแกน "สตริง" จากซ้ายไปขวา (ยกเว้น back = .true.) สำหรับการเกิดครั้งแรกของอักขระใด ๆ ที่ไม่มีอยู่ใน "ตัวอักษร" จะส่งคืนจำนวนเต็มที่ให้ตำแหน่งของอักขระนั้นหรือเป็นศูนย์หากพบเฉพาะอักขระใน "ตัวอักษร" |
8 | adjustl(string) เหลือเพียงแสดงอักขระที่มีอยู่ใน "สตริง" |
9 | adjustr(string) มันแสดงให้เห็นถึงตัวอักษรที่มีอยู่ใน "สตริง" อย่างถูกต้อง |
10 | len_trim(string) ส่งคืนจำนวนเต็มเท่ากับความยาวของ "string" (len (string)) ลบด้วยจำนวนช่องว่างต่อท้าย |
11 | repeat(string,ncopy) ส่งคืนสตริงที่มีความยาวเท่ากับ "ncopy" คูณความยาวของ "สตริง" และมีสำเนา "สตริง" ที่ต่อกัน "ncopy" |
ตัวอย่าง 1
ตัวอย่างนี้แสดงการใช้ไฟล์ index ฟังก์ชัน -
program testingChars
implicit none
character (80) :: text
integer :: i
text = 'The intrinsic data type character stores characters and strings.'
i=index(text,'character')
if (i /= 0) then
print *, ' The word character found at position ',i
print *, ' in text: ', text
end if
end program testingChars
เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นจะให้ผลลัพธ์ดังต่อไปนี้ -
The word character found at position 25
in text : The intrinsic data type character stores characters and strings.
ตัวอย่าง 2
ตัวอย่างนี้แสดงให้เห็นถึงการใช้ไฟล์ trim ฟังก์ชัน -
program hello
implicit none
character(len = 15) :: surname, firstname
character(len = 6) :: title
character(len = 25)::greetings
title = 'Mr.'
firstname = 'Rowan'
surname = 'Atkinson'
print *, 'Here is', title, firstname, surname
print *, 'Here is', trim(title),' ',trim(firstname),' ', trim(surname)
end program hello
เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นจะให้ผลลัพธ์ดังต่อไปนี้ -
Here isMr. Rowan Atkinson
Here isMr. Rowan Atkinson
ตัวอย่างที่ 3
ตัวอย่างนี้แสดงให้เห็นถึงการใช้ achar ฟังก์ชัน -
program testingChars
implicit none
character:: ch
integer:: i
do i = 65, 90
ch = achar(i)
print*, i, ' ', ch
end do
end program testingChars
เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นจะให้ผลลัพธ์ดังต่อไปนี้ -
65 A
66 B
67 C
68 D
69 E
70 F
71 G
72 H
73 I
74 J
75 K
76 L
77 M
78 N
79 O
80 P
81 Q
82 R
83 S
84 T
85 U
86 V
87 W
88 X
89 Y
90 Z
การตรวจสอบลำดับคำศัพท์ของอักขระ
ฟังก์ชันต่อไปนี้กำหนดลำดับของคำศัพท์ -
ซีเนียร์ No | ฟังก์ชั่นและคำอธิบาย |
---|---|
1 | lle(char, char) เปรียบเทียบว่าอักขระตัวแรกมีศัพท์น้อยกว่าหรือเท่ากับตัวที่สองหรือไม่ |
2 | lge(char, char) เปรียบเทียบว่าอักขระตัวแรกมีค่ามากกว่าหรือเท่ากับตัวที่สองหรือไม่ |
3 | lgt(char, char) เปรียบเทียบว่าอักขระตัวแรกมีค่ามากกว่าตัวที่สองหรือไม่ |
4 | llt(char, char) เปรียบเทียบว่าอักขระตัวแรกมีศัพท์น้อยกว่าตัวที่สองหรือไม่ |
Example 4
ฟังก์ชันต่อไปนี้แสดงให้เห็นถึงการใช้งาน -
program testingChars
implicit none
character:: a, b, c
a = 'A'
b = 'a'
c = 'B'
if(lgt(a,b)) then
print *, 'A is lexically greater than a'
else
print *, 'a is lexically greater than A'
end if
if(lgt(a,c)) then
print *, 'A is lexically greater than B'
else
print *, 'B is lexically greater than A'
end if
if(llt(a,b)) then
print *, 'A is lexically less than a'
end if
if(llt(a,c)) then
print *, 'A is lexically less than B'
end if
end program testingChars
เมื่อคุณคอมไพล์และรันโปรแกรมข้างต้นจะให้ผลลัพธ์ดังต่อไปนี้ -
a is lexically greater than A
B is lexically greater than A
A is lexically less than a
A is lexically less than B