[飞马小讨论] 如何实现将一个字符串表,连接成一个带空格连接的字符串
本帖最后由 qjchen 于 2011-12-15 15:43 编辑一个小小的讨论题,昨天我在完成这个小函数的时候,写了一段代码,有点冗长,后来朋友给了一段有趣的代码,挺短的。
在这里抛砖引玉一下,希望各位有兴趣参加,说不定结果会更好。
讨论问题:
strlst=("a" "b" "c" "d" "e"....) ,一个数量未名的字符串表
请写一段代码,将之变为 res="a b c d e"(以5个元素的表为例,余同),代码当然是越短越好,要是能一行就更好了:)
,不妨参与一下吧
感谢各位高手分享。 本帖最后由 santalin 于 2011-12-15 15:40 编辑
(setq str "")
(foreach x strlst(setq str (strcat str x " ")))
(princ str)
(setq str (car strlst))
(princ (foreach x (cdr strlst) (setq str (strcat str " " x))))
本帖最后由 xshrimp 于 2011-12-15 21:42 编辑
预留一个.下班了.回家写一个.
(substr(apply 'strcat(mapcar '(lambda(s)(strcat" "s))strlst))2) 本帖最后由 Gu_xl 于 2011-12-15 19:06 编辑
(strcat (car lst) (apply 'strcat (mapcar '(lambda (x) (strcat " " x)) (cdr lst))))
如果要考虑lst可能为nil时可添加一个判断:
(if lst
(strcat (car lst) (apply 'strcat (mapcar '(lambda (x) (strcat " " x)) (cdr lst))))
)
(vl-string-subst "" ")" (vl-string-subst "" "(" (vl-princ-to-string (mapcar 'read '("a" "b" "c")))))(vl-string-subst "" ")" (vl-string-subst "" "(" (vl-princ-to-string (mapcar 'read '("a" "b" "c"))))) (setq strlst(vl-string-trim "()"(vl-princ-to-string (mapcar 'readstrlst))) 有点遗憾,字母全大写了
(vl-string-trim "( )" (vl-list->string (subst 32 34 (vl-string->list
(vl-prin1-to-string '("a" "b" "c" "d"))))))
这样空格又太多了 (vl-string-trim "()"(vl-princ-to-string strlst)) 本帖最后由 qjchen 于 2011-12-15 21:18 编辑
非常感谢各位的热情参与~~~,让我大开眼界~~
我开始的做法也是用foreach,后来为了用apply就用了比较长的语句。朋友的代码和xshrimp和gu版主的类似。(substr (apply 'strcat (mapcar '(lambda(x) (strcat " " x)) strlst)) 2)
以上好几位朋友的做法都很好,我来逐个学习一下。谢谢各位,金币不多,在此贴之前的各位网友每人一些,谢谢~~
页:
[1]
2