首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在Nyquist中删除字符串中的字符

在Nyquist中删除字符串中的字符
EN

Stack Overflow用户
提问于 2012-01-28 04:47:43
回答 2查看 1.1K关注 0票数 3

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

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

因为在Nyquist中没有(count)函数,所以我尝试了下面这样的方法

代码语言:javascript
复制
(length (remove #\B mystring))

代码语言:javascript
复制
(length (remove #\B mystring :test equal))

但它不起作用。

暂时忘记字符计数,如何从字符串中删除‘B’?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-01-28 10:00:39

字符串中是否始终只有A%s和B%s?如果不是这样的话,您可能想要这样做

代码语言:javascript
复制
(remove #\A yourstring :test-not 'char=)

根据XLISP reference for remove的说法,Nyquist remove不处理strings,只处理lists。你需要将string转换为list才能以这种方式操作,但也没有coerce。这有点老生常谈,但我看到的最简单的方法是流式传输一个string并对其进行read-char。这将生成一个charlist,然后您可以使用remove对其进行操作。

代码语言:javascript
复制
(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)))))

现在应该可以

代码语言:javascript
复制
(remove #\A (string->list yourstring) :test-not 'char=)
票数 2
EN

Stack Overflow用户

发布于 2019-09-04 06:47:58

我知道这是一个古老的问题,但由于它有超过800的浏览量,所以也许值得有一个简单的答案:

代码语言:javascript
复制
(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"
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9039841

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档