请教一下表的转换操作
[*](setq lst '("12*2" "2*10" "10*11" "5.5*5"))
[*]
[*](setq newlst '(12 12 2 2 2 2 2 2 2 2 2 2 10 10 10 10 10 10 10 10 10 10 10 5.5 5.5 5.5 5.5 5.5))
请教一下,这样该怎么实现?
如上述这样转换,注意的是,上面是字符串,下面是实数或者整数
尽量用简洁的代码。
(setq lst '("12*2" "2*10" "10*11" "5.5*5"))
(apply 'append
(mapcar '(lambda (x)
(setq x (read (vl-string-subst " " "*" (strcat "(" x ")")))
sublst nil
)
(repeat (cadr x)
(setq sublst (cons (car x) sublst))
)
)
lst
)
) 同不会哈哈,没研究这么深,只会改c:后面的快捷键 (defun c:tt ()
(setq lst '("12*2" "2*10" "10*11" "5.5*5"))
(setq lst(mapcar '(lambda(x)
(list
(substr x 1(vl-string-search "*" x))
(substr x(+ 2(vl-string-search "*" x)))
)
)
lst)
)
(setq newlst nil)
(foreach x lst
(repeat(atoi(cadr x))
(setq newlst(cons(atof(car x))newlst))
)
)
(setq newlst(reverse newlst))
(print newlst)
(princ)
)
好吧,稍微研究了一下,写成这样,倒也达到效果了。还有更简洁的吗
你5000积分了没学会切割字符串? 你有种再说一遍 发表于 2024-8-10 21:50
你5000积分了没学会切割字符串?
确实对字符串相关处理,研究不多 本帖最后由 lee50310 于 2024-8-11 10:57 编辑
指令:tt2
回應: (12 12 2 2 2 2 2 2 2 2 2 2 10 10 10 10 10 10 10 10 10 10 10 5.5 5.5 5.5 5.5 5.5)
感谢热心解答,学到了 (defun c:tt ()
;; 定义乘法表达式的列表
(setq lst '("12*2" "2*10" "10*11" "5.5*5"))
;; 初始化一个空列表用于存储结果
(setq newlst nil)
;; 处理每个乘法表达式
(foreach expr lst
;; 获取乘法符号的位置
(setq pos (vl-string-search "*" expr))
;; 提取两个数字
(setq num1 (atof (substr expr 1 pos)))
(setq num2 (atoi (substr expr (+ pos 2))))
;; 根据第二个数字重复第一个数字
(repeat num2
(setq newlst (append newlst (list num1)))
)
)
;; 打印结果
(print newlst)
;; 退出函数
(princ)
) 不知道能不能帮上老哥忙{:1_1:}
页:
[1]
2