etoxp 发表于 2019-11-25 21:18:06

如何统计字符串中的"\"的个数?

如何统计字符串中的"\"的个数?
譬如:"aa\bbb\1\e"

wyl219 发表于 2019-11-25 22:09:50

只是统计数量的话很多办法.例如

(setq str "aa\\bbb\\1\\e");字符串中单个斜杠应用双斜杠代替,转义符
(setq num        (length (vl-remove-if '(lambda (x) (/= x 92))(vl-string->list str))))
先将字符串转换成ASCII码列表,然后删除所有不是\的元素,剩下的表长度就是\的数量

etoxp 发表于 2019-11-25 22:44:40

wyl219 发表于 2019-11-25 22:09
只是统计数量的话很多办法.例如

(setq str "aa\\bbb\\1\\e");字符串中单个斜杠应用双斜杠代替,转义符


要是字符串中就是\而不是\\呢?

satan421 发表于 2019-11-25 22:58:03

etoxp 发表于 2019-11-25 22:44
要是字符串中就是\而不是\\呢?

那就别用lisp,用个bat啥的。
一个语言统计自己的转义符,不是跟自己过不去吗。

wyl219 发表于 2019-11-26 03:45:16

本帖最后由 wyl219 于 2019-11-26 03:56 编辑

etoxp 发表于 2019-11-25 22:44
要是字符串中就是\而不是\\呢?
\本来就是转义符的标志,比如本来text对象的内容是\1,那么用entget获取到的就是"\\1",所以并没什么影响.
例如
(setq dxf_1 (cdr (assoc 1 (entget (car (entsel))))))
点选一个内容为\1的text对象,cad返回的结果是:

选择对象: "\\1"

而实际上,如果你把字符串定义成"aa\bbb\1\e"的话,如下:
(setq dxf_1 "aa\bbb\1\e")
(setq ed(entget (setq en (car (entsel)))))
(entmod (subst (cons 1 dxf_1) (assoc 1 ed) ed))


该字符串被修改成这个样子



1291500406 发表于 2019-11-26 14:53:50

本帖最后由 1291500406 于 2019-11-26 16:33 编辑

etoxp 发表于 2019-11-25 22:44
要是字符串中就是\而不是\\呢?
cad不可能返回值是"aa\bbb\1\e"字符串   (alert "aa\\bbb\\1\\e")(alert "aa\bbb\1\e")
cad不可能有(. .)两个点的表
很多都不可能
就像lisp永远成为不了主流编程语言

页: [1]
查看完整版本: 如何统计字符串中的"\"的个数?