找回密码
 立即注册

QQ登录

只需一步,快速开始

扫一扫,访问微社区

查看: 3856|回复: 74

[研讨] reverse字符串的四种方法及效率的比较

  [复制链接]

已领礼包: 40个

财富等级: 招财进宝

发表于 2017-4-29 16:12:04 | 显示全部楼层 |阅读模式

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

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

×
第一种方法:
  1. (defun revstr1 (old / i new)
  2.   (setq new "")
  3.   (repeat (setq i (strlen old))
  4.     (setq new (strcat new (substr old i 1))
  5.           i   (1- i)
  6.     )
  7.   )
  8.   new
  9. )


第二种方法:

游客,如果您要查看本帖隐藏内容请回复


第三种方法:

  1. (defun revstr3 (mystr / newstr)
  2.   (setq newstr "")
  3.   (while (/= mystr "")
  4.     (setq newstr (strcat newstr (substr mystr (strlen mystr)))
  5.           mystr         (substr mystr 1 (1- (strlen mystr)))
  6.     )
  7.   )
  8.   newstr
  9. )


第四种方法:

  1. (defun revstr4 (mystr / cnt len)
  2.   (setq        newstr ""
  3.         cnt    0
  4.         len    (strlen mystr)
  5.   )
  6.   (while (< cnt len)
  7.     (setq newstr (strcat newstr (substr mystr (- len cnt) 1))
  8.           cnt         (1+ cnt)
  9.     )
  10.   )
  11.   newstr
  12. )


计时函数:

  1. (defun timer (fun n / start stop)
  2.   (setq start (getvar "date"))
  3.   (repeat n (eval fun))
  4.   (setq stop (getvar "date"))
  5.   (princ (strcat "Elapsed time for "
  6.                  (itoa n)
  7.                  " iterations: "
  8.                  (rtos (* 86400.0 (- stop start)) 2 2)
  9.                  " secs.\n"
  10.          )
  11.   )
  12.   (eval fun)
  13. )


测试结果:


(setq a "ABCDEFG")
(timer '(revstr1 a) 100000)
(timer '(revstr2 a) 100000)
(timer '(revstr3 a) 100000)
(timer '(revstr4 a) 100000)
Command: (timer '(revstr1 a) 100000)
Elapsed time for 100000 iterations: 1.83 secs.
"GFEDCBA"
Command: (timer '(revstr2 a) 100000)
Elapsed time for 100000 iterations: 1.04 secs.
"GFEDCBA"
Command: (timer '(revstr3 a) 100000)
Elapsed time for 100000 iterations: 2.34 secs.
"GFEDCBA"
Command: (timer '(revstr4 a) 100000)
Elapsed time for 100000 iterations: 1.65 secs.
"GFEDCBA"

测试结果:第二种方法效率最高。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2017-4-29 16:27:05 | 显示全部楼层
问个题外话..用什么浏览器可以正常复制代码呀..
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2017-4-29 16:29:33 | 显示全部楼层

鼠标选中代码,拷贝就行了

代码开头点下鼠标, 到最后按住SHIFT点鼠标就选中了。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2017-4-29 16:31:44 | 显示全部楼层
没考虑中文哈..
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2017-4-29 16:34:44 | 显示全部楼层

你帮改进下啊,这个帖子主要是讨论效率,中文和英文算法是一样的。
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2017-4-29 16:40:00 | 显示全部楼层
借花献佛
(defun HH:StrReverse (stri / STR)  
  (setq str(VL-PRIN1-TO-STRING stri))
  (setq str (strcat "Dim ret \n ret=StrReverse(" str ") "))
  (or *wscript*
      (setq *wscript* (vlax-create-object "ScriptControl"))
  )
  (vlax-put *wscript* 'language "vbs")
  (vlax-invoke-method *wscript* 'ExecuteStatement str)
  (vlax-invoke-method *wscript* 'eval "ret")
)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2017-4-29 16:41:07 | 显示全部楼层
都没管中文..
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2017-4-29 16:41:13 | 显示全部楼层

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

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2017-4-29 16:42:45 | 显示全部楼层
(defun reverstr(str / a b)
  (setq b"")
  (while(> str"")
    (if(<(ascii(substr str 1 1))119)(setq b(strcat(substr str 1 1)b)str(substr str 2))
      (setq b(strcat(substr str 1 2)b)str(substr str 3))))
  b)
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 2476个

财富等级: 金玉满堂

发表于 2017-4-29 16:46:50 | 显示全部楼层
速度还是版主来..电脑不同速度肯定不同..另外我说的浏览器问题..QQ浏览器..复制带了行号哈..跟原来复制的效果不同..
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 1904个

财富等级: 堆金积玉

发表于 2017-4-29 16:52:52 | 显示全部楼层
看看,学习学习
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

发表于 2017-4-29 16:57:03 来自手机 | 显示全部楼层
谢谢楼主分享
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 20个

财富等级: 恭喜发财

发表于 2017-4-29 17:12:13 | 显示全部楼层
向N版学习,看看最快的
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 5583个

财富等级: 富甲天下

发表于 2017-4-29 17:15:11 | 显示全部楼层
回复,学习版主的程序!
论坛插件加载方法
发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;
如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子标题加上【已解决】;
如何回报帮助你解决问题的坛友,一个好办法就是给对方加【D豆】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
回复 支持 反对

使用道具 举报

已领礼包: 40个

财富等级: 招财进宝

 楼主| 发表于 2017-4-29 17:17:09 | 显示全部楼层

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-18 16:43 , Processed in 0.270827 second(s), 60 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

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