3

如何从 Nyquist 中的字符串中删除某个字符(与 xlisp 非常相似)并返回结果?

我想计算像“ABBAAAABBBAABAAAB”这样的字符串中有多少个“A”。(是的,字符串中只有 'A's 和 'B's。)

由于奈奎斯特没有(计数)功能,我尝试了类似的东西

(length (remove #\B mystring))

或者

(length (remove #\B mystring :test equal))

但它不起作用。

暂时忘记字符数,如何从字符串中删除“B”?

4

2 回答 2

2

字符串中总是只有As 和s 吗?B如果没有,你可能想做类似的事情

(remove #\A yourstring :test-not 'char=)

根据XLISP 参考remove,奈奎斯特remove不处理strings,只处理lists。您需要将 a 转换string为 alist才能以这种方式对其进行操作,但也没有coerce。这是一个触摸hacky,但我看到的最简单的方法是流式传输 astringread-char它。这将产生 a listof chars,然后您可以使用 s 进行操作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=)
于 2012-01-28T02:00:39.290 回答
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"
于 2019-09-03T22:47:57.890 回答