LISP - สตริง

สตริงใน Common Lisp คือเวกเตอร์เช่นอาร์เรย์หนึ่งมิติของอักขระ

ตัวอักษรสตริงอยู่ในเครื่องหมายคำพูดคู่ อักขระใด ๆ ที่ชุดอักขระสนับสนุนสามารถใส่ไว้ในเครื่องหมายคำพูดคู่เพื่อสร้างสตริงได้ยกเว้นอักขระเครื่องหมายคำพูดคู่ (") และอักขระหลีก (\) อย่างไรก็ตามคุณสามารถรวมอักขระเหล่านี้ได้โดยใช้เครื่องหมายแบ็กสแลช (\)

ตัวอย่าง

สร้างไฟล์ซอร์สโค้ดใหม่ชื่อ main.lisp และพิมพ์รหัสต่อไปนี้

(write-line "Hello World")
(write-line "Welcome to Tutorials Point")

;escaping the double quote character
(write-line "Welcome to \"Tutorials Point\"")

เมื่อคุณรันโค้ดจะส่งคืนผลลัพธ์ต่อไปนี้ -

Hello World
Welcome to Tutorials Point
Welcome to "Tutorials Point"

ฟังก์ชันการเปรียบเทียบสตริง

ฟังก์ชันและตัวดำเนินการเปรียบเทียบตัวเลขเช่น <และ> ไม่ทำงานกับสตริง Common LISP มีฟังก์ชันอีกสองชุดสำหรับเปรียบเทียบสตริงในโค้ดของคุณ ชุดหนึ่งพิจารณาตัวพิมพ์เล็กและตัวพิมพ์เล็กและใหญ่อีกชุดหนึ่ง

ตารางต่อไปนี้แสดงฟังก์ชัน -

ฟังก์ชันที่ละเอียดอ่อนของตัวพิมพ์เล็กและใหญ่ ฟังก์ชันที่ไม่คำนึงถึงตัวพิมพ์เล็กและใหญ่ คำอธิบาย
สตริง = สตริงเท่ากับ ตรวจสอบว่าค่าของตัวถูกดำเนินการทั้งหมดเท่ากันหรือไม่ถ้าใช่เงื่อนไขจะกลายเป็นจริง
สตริง / = สตริงไม่เท่ากัน ตรวจสอบว่าค่าของตัวถูกดำเนินการทั้งหมดแตกต่างกันหรือไม่หากค่าไม่เท่ากันเงื่อนไขจะกลายเป็นจริง
สตริง < string-lessp ตรวจสอบว่าค่าของตัวถูกดำเนินการลดลงอย่างจำเจหรือไม่
สตริง> สตริงที่มากขึ้น p ตรวจสอบว่าค่าของตัวถูกดำเนินการเพิ่มขึ้นอย่างจำเจหรือไม่
สตริง <= สตริงที่ไม่มากขึ้น p ตรวจสอบว่าค่าของตัวถูกดำเนินการด้านซ้ายมากกว่าหรือเท่ากับค่าของตัวถูกดำเนินการด้านขวาถัดไปหรือไม่ถ้าใช่เงื่อนไขจะกลายเป็นจริง
สตริง> = สตริงไม่ใช่น้อย p ตรวจสอบว่าค่าของตัวถูกดำเนินการด้านซ้ายน้อยกว่าหรือเท่ากับค่าของตัวถูกดำเนินการด้านขวาหรือไม่ถ้าใช่เงื่อนไขจะกลายเป็นจริง

ตัวอย่าง

สร้างไฟล์ซอร์สโค้ดใหม่ชื่อ main.lisp และพิมพ์รหัสต่อไปนี้

; case-sensitive comparison
(write (string= "this is test" "This is test"))
(terpri)
(write (string> "this is test" "This is test"))
(terpri)
(write (string< "this is test" "This is test"))
(terpri)

;case-insensitive comparision
(write (string-equal "this is test" "This is test"))
(terpri)
(write (string-greaterp "this is test" "This is test"))
(terpri)
(write (string-lessp "this is test" "This is test"))
(terpri)

;checking non-equal
(write (string/= "this is test" "this is Test"))
(terpri)
(write (string-not-equal "this is test" "This is test"))
(terpri)
(write (string/= "lisp" "lisping"))
(terpri)
(write (string/= "decent" "decency"))

เมื่อคุณรันโค้ดจะส่งคืนผลลัพธ์ต่อไปนี้ -

NIL
0
NIL
T
NIL
NIL
8
NIL
4
5

ฟังก์ชั่นการควบคุมเคส

ตารางต่อไปนี้อธิบายถึงฟังก์ชันการควบคุมเคส -

ซีเนียร์ ฟังก์ชั่นและคำอธิบาย
1

string-upcase

แปลงสตริงเป็นตัวพิมพ์ใหญ่

2

string-downcase

แปลงสตริงเป็นตัวพิมพ์เล็ก

3

string-capitalize

ใช้อักษรตัวพิมพ์ใหญ่แต่ละคำในสตริง

ตัวอย่าง

สร้างไฟล์ซอร์สโค้ดใหม่ชื่อ main.lisp และพิมพ์รหัสต่อไปนี้

(write-line (string-upcase "a big hello from tutorials point"))
(write-line (string-capitalize "a big hello from tutorials point"))

เมื่อคุณรันโค้ดจะส่งคืนผลลัพธ์ต่อไปนี้ -

A BIG HELLO FROM TUTORIALS POINT
A Big Hello From Tutorials Point

การตัดแต่งสตริง

ตารางต่อไปนี้อธิบายฟังก์ชันการตัดแต่งสตริง -

ซีเนียร์ ฟังก์ชั่นและคำอธิบาย
1

string-trim

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

2

String-left-trim

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

3

String-right-trim

ใช้อักขระสตริงเป็นอาร์กิวเมนต์แรกและสตริงเป็นอาร์กิวเมนต์ที่สองและส่งกลับสตริงย่อยที่อักขระทั้งหมดที่อยู่ในอาร์กิวเมนต์แรกจะถูกลบออกจากส่วนท้ายของสตริงอาร์กิวเมนต์

ตัวอย่าง

สร้างไฟล์ซอร์สโค้ดใหม่ชื่อ main.lisp และพิมพ์รหัสต่อไปนี้

(write-line (string-trim " " "   a big hello from tutorials point   "))
(write-line (string-left-trim " " "   a big hello from tutorials point   "))
(write-line (string-right-trim " " "   a big hello from tutorials point   "))
(write-line (string-trim " a" "   a big hello from tutorials point   "))

เมื่อคุณรันโค้ดจะส่งคืนผลลัพธ์ต่อไปนี้ -

a big hello from tutorials point
a big hello from tutorials point   
   a big hello from tutorials point
big hello from tutorials point

ฟังก์ชันสตริงอื่น ๆ

สตริงใน LISP เป็นอาร์เรย์และลำดับด้วย เราจะกล่าวถึงประเภทข้อมูลเหล่านี้ในบทช่วยสอนที่กำลังจะมาถึง ฟังก์ชันทั้งหมดที่ใช้ได้กับอาร์เรย์และลำดับยังใช้กับสตริง อย่างไรก็ตามเราจะสาธิตฟังก์ชันที่ใช้กันทั่วไปโดยใช้ตัวอย่างต่างๆ

การคำนวณความยาว

length ฟังก์ชันคำนวณความยาวของสตริง

การแยกสตริงย่อย

subseq ฟังก์ชันส่งคืนสตริงย่อย (เนื่องจากสตริงเป็นลำดับด้วย) โดยเริ่มต้นที่ดัชนีเฉพาะและต่อไปยังดัชนีสิ้นสุดเฉพาะหรือจุดสิ้นสุดของสตริง

การเข้าถึงตัวละครในสตริง

char ฟังก์ชันอนุญาตให้เข้าถึงอักขระแต่ละตัวของสตริง

Example

สร้างไฟล์ซอร์สโค้ดใหม่ชื่อ main.lisp และพิมพ์รหัสต่อไปนี้

(write (length "Hello World"))
(terpri)
(write-line (subseq "Hello World" 6))
(write (char "Hello World" 6))

เมื่อคุณรันโค้ดจะส่งคืนผลลัพธ์ต่อไปนี้ -

11
World
#\W

การเรียงลำดับและการรวมสตริง

sortฟังก์ชันช่วยให้สามารถจัดเรียงสตริงได้ ใช้ลำดับ (เวกเตอร์หรือสตริง) และเพรดิเคตสองอาร์กิวเมนต์และส่งคืนเวอร์ชันที่เรียงลำดับของลำดับ

merge ฟังก์ชันรับสองลำดับและเพรดิเคตและส่งกลับลำดับที่เกิดจากการรวมสองลำดับตามเพรดิเคต

Example

สร้างไฟล์ซอร์สโค้ดใหม่ชื่อ main.lisp และพิมพ์รหัสต่อไปนี้

;sorting the strings
(write (sort (vector "Amal" "Akbar" "Anthony") #'string<))
(terpri)

;merging the strings
(write (merge 'vector (vector "Rishi" "Zara" "Priyanka") 
   (vector "Anju" "Anuj" "Avni") #'string<))

เมื่อคุณรันโค้ดจะส่งคืนผลลัพธ์ต่อไปนี้ -

#("Akbar" "Amal" "Anthony")
#("Anju" "Anuj" "Avni" "Rishi" "Zara" "Priyanka")

การย้อนกลับสตริง

reverse ฟังก์ชันย้อนกลับสตริง

ตัวอย่างเช่นสร้างไฟล์ซอร์สโค้ดใหม่ชื่อ main.lisp และพิมพ์โค้ดต่อไปนี้

(write-line (reverse "Are we not drawn onward, we few, drawn onward to new era"))

เมื่อคุณรันโค้ดจะส่งคืนผลลัพธ์ต่อไปนี้ -

are wen ot drawno nward ,wef ew ,drawno nward ton ew erA

การเชื่อมต่อสตริง

ฟังก์ชัน concatenate เชื่อมสองสตริงเข้าด้วยกัน นี่คือฟังก์ชันลำดับทั่วไปและคุณต้องระบุประเภทผลลัพธ์เป็นอาร์กิวเมนต์แรก

ตัวอย่างเช่นสร้างไฟล์ซอร์สโค้ดใหม่ชื่อ main.lisp และพิมพ์โค้ดต่อไปนี้

(write-line (concatenate 'string "Are we not drawn onward, " "we few, drawn onward to new era"))

เมื่อคุณรันโค้ดจะส่งคืนผลลัพธ์ต่อไปนี้ -

Are we not drawn onward, we few, drawn onward to new era