aaa bbb ccc
对于上面一行,我只想获得字符串"aaa"
,就像C中的scanf("%s",str)
一样。
答案 0 :(得分:1)
要优雅地解决您的问题,您需要一个提取单词的功能。这可能有用,或者你可以找到一些好的库:
CL-USER> (defun split (str token &aux result (len (length str)))
(labels ((rec (i)
(if (< i len)
(let ((p (or (position token str :start i)
len)))
(when (/= p i)
(push (subseq str i p) result))
(rec (1+ p)))
(reverse result))))
(rec 0)))
SPLIT
此函数遍历给定的字符串并复制其不包含给定标记的部分。请注意我们如何在每次递归调用时复制整个字符串,但移动指针&#39; i
知道从哪里开始下一次搜索。
现在,您可以使用nth
访问任何字词:
CL-USER> (nth 0 (split "aaa bbb ccc" #\space))
"aaa"
CL-USER> (nth 1 (split "aaa bbb ccc" #\space))
"bbb"
CL-USER> (nth 2 (split "aaa bbb ccc" #\space))
"ccc"
答案 1 :(得分:0)