如何从Nyquist (与xlisp非常相似)中的字符串中删除某个字符并返回结果?
我想计算一下像"ABBAAAABBBAABAAAB“这样的字符串中有多少个"A”。(是的,字符串中只有‘A’和‘B’。)
因为在Nyquist中没有(count)函数,所以我尝试了下面这样的方法
(length (remove #\B mystring))或
(length (remove #\B mystring :test equal))但它不起作用。
暂时忘记字符计数,如何从字符串中删除‘B’?
发布于 2012-01-28 10:00:39
字符串中是否始终只有A%s和B%s?如果不是这样的话,您可能想要这样做
(remove #\A yourstring :test-not 'char=)根据XLISP reference for remove的说法,Nyquist remove不处理strings,只处理lists。你需要将string转换为list才能以这种方式操作,但也没有coerce。这有点老生常谈,但我看到的最简单的方法是流式传输一个string并对其进行read-char。这将生成一个char的list,然后您可以使用remove对其进行操作。
(defun string->list (a-string)
(let ((collector nil)
(stream (make-string-input-stream a-string)))
(dotimes (c (length a-string) (reverse collector))
(setf collector (cons (read-char stream) collector)))))现在应该可以
(remove #\A (string->list yourstring) :test-not 'char=)发布于 2019-09-04 06:47:58
我知道这是一个古老的问题,但由于它有超过800的浏览量,所以也许值得有一个简单的答案:
(defun remove-char (character sequence)
(let ((out ""))
(dotimes (i (length sequence) out)
(setf ch (char sequence i))
(unless (char= ch character)
(setf out (format nil "~a~a" out ch))))))
(setf mystring "ABBAABABCCCCBBCCCCAAA")
(remove-char #\B mystring) ;returns "AAAACCCCCCCCAAA"https://stackoverflow.com/questions/9039841
复制相似问题