将字符串拆分为单个字符

5

我在使用Lisp时遇到了两个问题,但我找不到任何教程或网站来解释这些问题。如何将字符串拆分为单个字符?以及如何将这些字符更改为它们对应的ASCII值?如果有人知道任何解释这些问题的网站或教程视频,那将不胜感激。

4个回答

11
CL-USER 87 > (coerce "abc" 'list)
(#\a #\b #\c)


CL-USER 88 > (map 'list #'char-code "abc")
(97 98 99)

获取Common Lisp快速参考


“Common Lisp Quick Reference”的链接很遗憾已经失效了。 - Reb.Cabin

1
一个Lisp字符串已经以某种方式分成了它的字符。它是一个字符向量,根据你需要做什么,你可以对它使用整个字符串操作,或者任何适用于向量的操作(比如序列协议的所有操作)来处理单个字符。

0

split-string 函数基于正则表达式分隔符将字符串拆分为子字符串。每个分隔符的匹配定义了一个拆分点;在拆分点之间的子字符串被组成一个列表并返回。如果省略参数 omit-nulls 或其值为 nil,则结果包含空字符串,当有两个连续的分隔符匹配或者匹配位于字符串的开头或结尾时。如果参数 omit-nulls 的值为 t,则这些空字符串将从结果中省略。如果参数 separators 的值为 nil 或者省略,则默认值为 split-string-default-separators。

作为特殊情况,当参数 separators 的值为 nil 或者省略时,空字符串总是会从结果中省略。因此:

(split-string " two words ") -> ("two" "words")
The result is not ("" "two" "words" ""), which would rarely be useful. If you need
such a result, use an explicit value for separators:
(split-string " two words " split-string-default-separators)  -> ("" "two" "words" "")

More examples:
(split-string "Soup is good food" "o")   ->   ("S" "up is g" "" "d f" "" "d")
(split-string "Soup is good food" "o" t) -> ("S" "up is g" "d f" "d")
(split-string "Soup is good food" "o+")  ->  ("S" "up is g" "d f" "d")

使用split-string,是否可以将字符串分隔成字符,还是只能用于字符分隔符? - Nick Welki

0

如果我不知道字符串中有多少个字符,那么使用elt和aref还可以吗? - Nick Welki
你可以使用 length 函数来获取字符串的长度。除了适用于任何序列的 elt 和适用于任何数组的 aref,你还可以使用仅适用于字符串的函数 char - Rörd

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接