小鸟 发表于 2023-4-23 00:57:56

字符串替换

本帖最后由 小鸟 于 2023-4-23 14:28 编辑

;;;字符串
;;;被替换
;;;替换为
;;;(tihuanzifu "1234567890423456447" "456" "bb")
;;;>> "123bb7890423bb447"
(defun tihuanzifu (zfc bzfc wzfc / n ii)
(setq        ii 0
        n(strlen zfc)
)
(repeat n
    (setq ii(vl-string-search bzfc zfc ii)
          zfc (vl-string-subst wzfc bzfc zfc ii)
    )
)
zfc
)

vitalgg 发表于 2023-4-23 11:50:38


(defun string:subst-all (str-new str-old str / inc len)
"用 str-new 替换 字符串中所有的 str-old "
"结果字符串"
"(string:subst-all \"qwe\"
    \"abc\"
    \"mabcpoildabce\")
=> \"mqwepoildqwee\""
(if (> (strlen str-old) 0)
      (progn
(setq len (strlen str-new)
      inc 0)
(while (setq inc (vl-string-search str-old str inc))
    (setq str (vl-string-subst str-new str-old str inc)
    inc (+ inc len)))))
str)


vitalgg 发表于 2023-4-23 11:55:24

试试这行代码报错不?

(tihuanzifu "1234567890423456447" "456" "bb")

小鸟 发表于 2023-4-23 13:56:36

本帖最后由 小鸟 于 2023-4-23 13:59 编辑

vitalgg 发表于 2023-4-23 11:55
试试这行代码报错不?

(tihuanzifu "1234567890423456447" "456" "bb")
报错了,但是手动按的时候 有结果。 我再研究研究:handshake

vitalgg 发表于 2023-4-23 14:29:34

对比一下我们两个代码的区别就明白了

小鸟 发表于 2023-4-23 19:18:22

vitalgg 发表于 2023-4-23 14:29
对比一下我们两个代码的区别就明白了

看到了跳过被替换的字符就不会重复了,把+1 改成+替换的字符长度,我又进步一点点了

vitalgg 发表于 2023-4-23 20:36:35

https://gitee.com/atlisp/atlisp-lib
@lisp 开源函数库,大量函数期待您的开发与维护。众多开发者协同开发与维护,你不再是一个人在战斗。

在CAD中执行
(@:updatelib)
实时更新函数库。

本贴函数源码:
https://gitee.com/atlisp/atlisp-lib/blob/main/src/string/subst-all.lsp


页: [1]
查看完整版本: 字符串替换