明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1418|回复: 5

[求助]一个新手的问题,文字大小写

[复制链接]
发表于 2007-9-15 21:22 | 显示全部楼层 |阅读模式

小弟刚学autolisp,看的是autolisp&dcl基础篇的书.

看的过程中遇到一点小问题,烦高手指点一下,

题目是这样的,选取一段文字,将第一个字符改为大写,其余为小写.

书上的代码是这样的;

(defun chktxt()
  (setq p ""  pp ""  n 1 key nil)
  (repeat (strlen txt)
    (setq pk p)
    (setq p(substr txt n 1))
    (if (= n 1)
      (setq key t)
      (if (= pk "")(setq key t)(setq key nil)))
    (if(= key nil)
      (setq pp(strcat pp(strcase p t)))
      (setq pp(strcat pp(strcase p))))
    (setq n(1+ n))
    )
)

其中的有些代码小弟实在理解不了,烦高手指点一下,用中文说以下大概逻辑关系.小弟不胜感谢!!!

发表于 2007-9-16 07:41 | 显示全部楼层
  1. 这种书简直就是误人子弟!
  2. (defun chktxt (txt / str0 str1)
  3.   (setq    str0 (strcase (substr txt 1 1));_取第一个字符
  4.     str1 (strcase (substr txt 2) t);_第一个以后的字符
  5.   )
  6.   (strcat str0 str1);_合并
  7. )
发表于 2007-9-19 21:27 | 显示全部楼层
本帖最后由 作者 于 2007-9-19 21:47:36 编辑

(defun chktxt ()
  (setq p   ""
 pp  ""
 n   1
 key nil
  )
  (repeat (strlen txt)
    ;;重复(txt字符数目)次
    (setq pk p)
    (setq p (substr txt n 1))
    ;;把txt第n个字符传给p
    (if (= n 1)
      (setq key t)
      (if (= pk "")
 (setq key t)
 (setq key nil)
      )
    );;当n=1时或pk=""时,设k=t;否则k=nil
    (if (= key nil)
      (setq pp (strcat pp (strcase p t)))
      (setq pp (strcat pp (strcase p)))
    )
    ;;当k=t时,将p大写和pp合并;否则将p小写和pp合并
    (setq n (1+ n))
  )
)

这个程序应该是把每个单词的第一个字母大写,pk=" "中间应该是空格.

也还可以简化:

(defun chktxt ()
  (setq p   ""
 pp  ""
 n   1
 txt "fhdj fds fwe fsfgsd  HJI"
  )
  (repeat (strlen txt)
    (setq pk p)
    (setq p (substr txt n 1))
    (if (or (= n 1) (= pk " "))
      (setq key nil)
      (setq key t)
    )
    (setq pp (strcat pp (strcase p key)))
    (setq n (1+ n))
  )
  (eval pp)
)

发表于 2007-9-19 22:12 | 显示全部楼层
  1. ;;;第一个字符大写,其余小写
  2. (defun CHKTXT (TXT)
  3.     (strcat (strcase (substr TXT 1 1))
  4.         (strcase (substr TXT 2) t)
  5.     )
  6. )
测试:
_$ (CHKTXT "ABCD")
"Abcd"
_$ (CHKTXT "abcd")
"Abcd"
 楼主| 发表于 2007-9-30 20:19 | 显示全部楼层
感谢各位的热心帮助,特别是coldboly1984,看了你的详细解答,我大致弄清楚了这个程序.这段程序书上写的确实有点糟糕,好几个地方把我误导了.相比之下,你的程序简化比书上好很多.简洁明了.希望以后还能有机会得到你的指导.
 楼主| 发表于 2007-9-30 20:55 | 显示全部楼层
试了ivde提供的代码,感觉更好,真是受益非浅,谢谢各位
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-3 02:10 , Processed in 0.220593 second(s), 25 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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