如何从Nyquist中的字符串中删除某个字符(与xlisp非常相似)并返回结果?
我想计算像“ABBAAAABBBAABAAAB”这样的字符串中有多少“A”。 (是的,字符串中只有'A'和'B'。)
由于奈奎斯特没有(计数)功能,我尝试了类似
的功能(length (remove #\B mystring))
或
(length (remove #\B mystring :test equal))
但它不起作用。
暂时忘记字符数,如何从字符串中删除'B'?
答案 0 :(得分:2)
字符串中是否只有A
和B
s?如果没有,您可能想要做类似
(remove #\A yourstring :test-not 'char=)
根据XLISP reference for remove
,奈奎斯特remove
不处理string
s,只处理list
s。您需要将string
转换为list
才能以这种方式对其进行操作,但也没有coerce
。这是一个触摸hacky,但我看到最简单的方法是流string
和read-char
它。这将生成list
char
个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=)
现在应该可以
了{{1}}
答案 1 :(得分:1)
我看到这是一个古老的问题,但是由于它具有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"