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