找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 883|回复: 4

[求助] [求助]:字符串中字符列表

[复制链接]
发表于 2007-12-24 19:40:15 | 显示全部楼层 |阅读模式

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

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

×
(defun ch1 (a b)
(setq l1 '() k (strlen b) kk (strlen a))
(repeat k
(if (setq nn (vl-string-search a b))
    (setq l1 (cons (list nn a) l1)
          b (substr b (+ nn kk 1))
          )
          )
          )
         (reverse l1)
          )
;;;;;;;;
希望得到效果(ch1 "1" "12121")
得到((0 "1") (2 "1") (4 "1"))
哪位帮忙改改.
圣诞快乐
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 7229个

财富等级: 富甲天下

发表于 2007-12-24 23:18:46 | 显示全部楼层

  1. (defun ch1 (a b)
  2.   (setq l1 '()
  3.         k  (strlen b)
  4.         kk (strlen a)
  5.        idx  0
  6.   )
  7.   (while (< idx k)
  8.     (if (setq nn (vl-string-search a b idx))
  9.       (setq l1 (cons (list nn a) l1)
  10.            idx (+ idx kk nn)
  11.       )
  12.     )
  13.   )
  14.   (reverse l1)
  15. )
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-12-25 08:57:34 | 显示全部楼层
改了一下
(defun ch1 (a b)
  (setq l1 '()
        k  (strlen b)
        kk (strlen a)
       idx  0
  )
  (while (< idx k)
    (if (setq nn (vl-string-search a b idx))
      (setq l1 (cons (list nn a) l1)
           idx (+ idx kk nn)
      )
  (setq idx (1+ idx)) ;;;;;;;;add
    )
  )
  (reverse l1)
)
;;;谢谢 圣诞快乐
还是有点问题:
(ch1 "一" "配电一二一一一系统图(一)") 结果不对
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2007-12-25 11:58:27 | 显示全部楼层
因为汉字的一个字是两个字节,也就是说,
只要判断是汉字时,再重新考虑就行。。
以下代码刚写,调试后没发现问题,可以试用一下。有问题可以回贴哦。。。
[php]
;;;功能:取得相应字符的位置
;;;命令:(cjw-stringposition pattern string)
;;;说明:
;;;1)参数 pattern 为字符串,包含要搜索的子串。
;;;2)参数 string 为字符串,在其中搜索 pattern。
;;;返回:(位置 . 相应字符)合成的表
;;;carrot1983 2007-12-25
(defun cjw-stringposition (pattern string / i l1 lst1 lst2 m n s str)
  (setq l1 (vl-string->list string))
  (setq i 0)
  (setq lst1 nil)
  (while (nth i l1)
    (setq m (list (nth i l1)))
    (if        (>= (car m) 129)
      (progn
        (setq m (list (nth i l1) (nth (+ i 1) l1)))
        (setq i (+ i 1))
      )
    )
    (setq str (vl-list->string m))
    (setq lst1 (cons str lst1))
    (setq i (+ i 1))
  )
  (setq lst1 (reverse lst1))
  (setq n 0)
  (setq lst2 nil)
  (repeat (length lst1)
    (setq s (nth n lst1))
    (if        (= s pattern)
      (setq lst2 (cons (cons n s) lst2))
    )
    (setq n (1+ n))
  )
  (setq lst2 (reverse lst2))
)
[/php]

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

使用道具 举报

 楼主| 发表于 2007-12-25 13:49:42 | 显示全部楼层
找到了
3楼的idx (+ idx kk nn)该为idx (+ kk nn)即可
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-11-16 23:51 , Processed in 0.208435 second(s), 38 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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