LISP - струны

Строки в Common Lisp - это векторы, то есть одномерный массив символов.

Строковые литералы заключаются в двойные кавычки. Любой символ, поддерживаемый набором символов, может быть заключен в двойные кавычки для создания строки, за исключением символа двойной кавычки (") и escape-символа (\). Однако вы можете включить их, экранировав их обратной косой чертой (\).

пример

Создайте новый файл исходного кода с именем 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 предоставляет два других набора функций для сравнения строк в вашем коде. Один набор чувствителен к регистру, а другой - без учета регистра.

В следующей таблице представлены функции -

Функции с учетом регистра Функции без учета регистра Описание
строка = равный по строке Проверяет, равны ли значения всех операндов или нет, если да, то условие становится истинным.
строка / = строка-не-равно Проверяет, все ли значения операндов разные или нет, если значения не равны, тогда условие становится истинным.
строка < без струн Проверяет, монотонно ли уменьшаются значения операндов.
строка> струна-большая Проверяет, монотонно ли увеличиваются значения операндов.
строка <= строка-не-большая Проверяет, больше ли значение любого левого операнда или равно значению следующего правого операнда, если да, то условие становится истинным.
строка> = строка не менее Проверяет, меньше ли значение любого левого операнда или равно значению его правого операнда, если да, то условие становится истинным.

пример

Создайте новый файл исходного кода с именем 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

Функции управления делами

В следующей таблице описаны функции управления делами -

Sr. No. Описание функции
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

Обрезка струн

В следующей таблице описаны функции обрезки строки -

Sr. No. Описание функции
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

Объединение строк

Функция конкатенации объединяет две строки. Это универсальная функция последовательности, и вы должны указать тип результата в качестве первого аргумента.

Например, создайте новый файл исходного кода с именем 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