明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 3836|回复: 14

[飞马小讨论] 如何实现将一个字符串表,连接成一个带空格连接的字符串

  [复制链接]
发表于 2011-12-15 15:36:24 | 显示全部楼层 |阅读模式
本帖最后由 qjchen 于 2011-12-15 15:43 编辑

一个小小的讨论题,昨天我在完成这个小函数的时候,写了一段代码,有点冗长,后来朋友给了一段有趣的代码,挺短的。

在这里抛砖引玉一下,希望各位有兴趣参加,说不定结果会更好。

讨论问题:

strlst=("a" "b" "c" "d" "e"....) ,一个数量未名的字符串表

请写一段代码,将之变为 res="a b c d e"  (以5个元素的表为例,余同),代码当然是越短越好,要是能一行就更好了:)

,不妨参与一下吧
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2023-10-22 19:36:15 | 显示全部楼层
感谢各位高手分享。
发表于 2011-12-15 15:39:40 | 显示全部楼层
本帖最后由 santalin 于 2011-12-15 15:40 编辑
  1. (setq str "")
  2. (foreach x strlst  (setq str (strcat str x " ")))
  3. (princ str)

评分

参与人数 1金钱 +5 收起 理由
qjchen + 5 赞一个!

查看全部评分

发表于 2011-12-15 16:27:11 | 显示全部楼层
  1. (setq str (car strlst))
  2. (princ (foreach x (cdr strlst) (setq str (strcat str " " x))))

评分

参与人数 1金钱 +5 收起 理由
qjchen + 5 赞一个!

查看全部评分

发表于 2011-12-15 17:37:31 | 显示全部楼层
本帖最后由 xshrimp 于 2011-12-15 21:42 编辑

预留一个.下班了.回家写一个.
  1. (substr(apply 'strcat(mapcar '(lambda(s)(strcat" "s))strlst))2)

评分

参与人数 1金钱 +5 收起 理由
qjchen + 5 赞一个!

查看全部评分

发表于 2011-12-15 18:56:51 | 显示全部楼层
本帖最后由 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))))

)

评分

参与人数 1金钱 +5 收起 理由
qjchen + 5 赞一个!

查看全部评分

发表于 2011-12-15 19:30:44 | 显示全部楼层
(vl-string-subst "" ")" (vl-string-subst "" "(" (vl-princ-to-string (mapcar 'read '("a" "b" "c")))))
  1. (vl-string-subst "" ")" (vl-string-subst "" "(" (vl-princ-to-string (mapcar 'read '("a" "b" "c")))))

评分

参与人数 1金钱 +5 收起 理由
qjchen + 5 赞一个!

查看全部评分

发表于 2011-12-15 20:04:08 | 显示全部楼层
  1. (setq strlst(vl-string-trim "()"(vl-princ-to-string (mapcar 'read  strlst)))

评分

参与人数 1金钱 +5 收起 理由
qjchen + 5 赞一个!

查看全部评分

发表于 2011-12-15 20:21:37 | 显示全部楼层
有点遗憾,字母全大写了
  1. (vl-string-trim "( )" (vl-list->string (subst 32 34 (vl-string->list
  2. (vl-prin1-to-string '("a" "b" "c" "d"))))))

这样空格又太多了
发表于 2011-12-15 20:37:22 | 显示全部楼层
(vl-string-trim "()"(vl-princ-to-string strlst))

评分

参与人数 2金钱 +10 收起 理由
qjchen + 5 赞一个!
yjr111 + 5 好!可惜币不能加了,钱也只有5块了,都给了.

查看全部评分

 楼主| 发表于 2011-12-15 21:06:23 | 显示全部楼层
本帖最后由 qjchen 于 2011-12-15 21:18 编辑

非常感谢各位的热情参与~~~,让我大开眼界~~
我开始的做法也是用foreach,后来为了用apply就用了比较长的语句。朋友的代码和xshrimp和gu版主的类似。(substr (apply 'strcat (mapcar '(lambda(x) (strcat " " x)) strlst)) 2)
以上好几位朋友的做法都很好,我来逐个学习一下。谢谢各位,金币不多,在此贴之前的各位网友每人一些,谢谢~~



您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2024-11-17 08:17 , Processed in 0.201435 second(s), 32 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表