找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 787|回复: 6

[讨论]:想知道怎么把字串搞成一个表?

[复制链接]
发表于 2007-1-17 17:50:47 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?立即注册

×
想知道怎么把字串搞成一个表?
用lisp编。也就是R14下能用的。
例如:字串"1-2-3-4" 变成表("1" "-" "2" "-" "3" "-" "4")
我只能得到像"1"这样一个单独的字串。但是不知道怎么把每个单独的字串组成表。这里用到一个循环,一个条件。。谁知道能否告知,先谢了。。。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 2个

财富等级: 恭喜发财

发表于 2007-1-17 19:19:07 | 显示全部楼层

Re: [讨论]:想知道怎么把字串搞成一个表?

最初由 carrot1983 发布
[B]想知道怎么把字串搞成一个表?
用lisp编。也就是R14下能用的。
例如:字串"1-2-3-4" 变成表("1" "-" "2" "-" "3" "-" "4")
我只能得到像"1"这样一个单独的字串。但是不知道怎么把每个单独的字串组成表。这里用到?.. [/B]

  1.   [FONT=courier new]
  2. (defun test1 (str / lst strl i)
  3.   (setq strl (strlen str))
  4.   (setq i 1)
  5.   (while (<= i strl)
  6.     (setq lst (cons (substr str i 1) lst))
  7.     (setq i (1+ i))
  8.   )
  9.   (reverse lst)
  10. )
  11. (defun test2 (str / lst strl i)
  12.   (setq strl (strlen str))
  13.   (setq i 1)
  14.   (while (<= i strl)
  15.     (setq lst (cons (substr str i 1) lst))
  16.     (setq i (1+ i))
  17.   )
  18.   (mapcar
  19.     'read
  20.     (reverse lst)
  21.   )
  22. )
  23.   [/FONT]

测试:
命令: (setq a "1-2-3-4")
"1-2-3-4"
命令: (test1 a)
("1" "-" "2" "-" "3" "-" "4")

命令: (test2 a)
(1 - 2 - 3 - 4)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 7231个

财富等级: 富甲天下

发表于 2007-1-17 19:22:10 | 显示全部楼层
;; (C.) 1996 by Vladimir Nesterovsky<vne...@netvision.net.il>
;; USE THESE FUNCTIONS FOR ANY NON-PROFITABLE PURPOSE WHILE
;; KEEPING THIS NOTICE. NO WARRANTIES ARE GIVEN WHATSOEVER.


;; strtol convert string of chars into list of 1-char strings|;


(defun strtol (s / lst c)
  (repeat (setq c (strlen s))
    (Setq lst (cons (substr s c 1) lst)
   c   (1- c)
    )
  )
  lst
)


Command: (strtol "1-2-3-4")
("1" "-" "2" "-" "3" "-" "4")
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

发表于 2007-1-17 21:07:05 | 显示全部楼层
(mapcar 'chr (vl-string->list str))
就这样一行ok了吧~当然还没有管理中文字节
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2个

财富等级: 恭喜发财

发表于 2007-1-17 21:49:24 | 显示全部楼层

  1.   [FONT=courier new]
  2. ;;;还是VLISP强!
  3. (defun test3(str)
  4.   (mapcar
  5.     'chr
  6.     (vl-string->list str)
  7.   )
  8. )
  9. (defun test4(str)
  10.   (mapcar
  11.     'read
  12.     (mapcar
  13.       'chr
  14.       (vl-string->list str)
  15.     )
  16.   )
  17. )
  18.   [/FONT]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-1-18 22:44:27 | 显示全部楼层
我想大家都很厉害。。但是可能跟我想要的理想答案差了一点点点距离。
是我没说清楚。。。
应该是想得到:由符号来做为分界的条件
例如:"10-200-30-40000"把字串变成表("10" "-" "200" "-" "30" "-" "40000").
谢谢楼上几位.
这是根据二楼的高手改的:
[php]
;取出字串中,除分隔符外的字符列成表。
(defun test1 (str / lst strl i _pos len k n a b ab ab_lst)
  (setq strl (strlen str))
  (setq i 1)
  (while (<= i strl)
    (if (= "-" (substr str i 1))
    (setq lst (cons i lst))
    )
    (setq i (1+ i))
  )
  (setq _pos (append '(0) (reverse (append (list (1+ strl)) lst))))
  (setq len (1- (length _pos)))
  (setq k 0)
  (setq n 0)
  (while (< k len)
         (setq a (1+ (nth n _pos)))
         (setq b (- (nth (1+ k) _pos) a))
         (setq ab (substr str a b))
         (setq ab_lst (cons ab ab_lst))
         (setq k (1+ k))
         (setq n k)
  )
  (reverse ab_lst)
)

(test1 "10-20-30-40")
;运行结果:("10" "20" "30" "40")
[/php]
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 6个

财富等级: 恭喜发财

发表于 2007-1-20 20:16:51 | 显示全部楼层
这个东东函数库里现成的东东了送上一个简明的:

  1. (defun split (str x / xlen n lst)
  2.   (setq xlen (strlen x))
  3.   (while (setq n (vl-string-search x str))
  4.     (setq lst (cons (substr str 1 n) lst))
  5.     (setq str (substr str (+ 1 xlen n)))
  6.   )
  7.   (reverse (cons str lst))
  8. )

(split "10-20-30-40" "-")
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

QQ|申请友链|Archiver|手机版|小黑屋|辽公网安备|晓东CAD家园 ( 辽ICP备15016793号 )

GMT+8, 2024-11-17 19:30 , Processed in 0.187346 second(s), 42 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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