| 本帖最后由 llsheng_73 于 2014-6-22 19:02 编辑 
 
   (defun tt(str / a b m n op)
  (setq a(mapcar'(lambda(x)(if(>(length(setq a(vl-remove""(strsplit x'("-")))))1)
                      (reverse(setq m(if(>(atoi(car a))0)(atoi(car a))(apply'+(vl-string->list(car a))))
                                    n(if(>(atoi(last a))0)(atoi(last a))(apply'+(vl-string->list(last a))))
                                    a(list(car a))op(if(< m n)1+ 1-)
                                    b(repeat(abs(- m n))
                                       (setq m(if(>(atoi(car a))0)(atoi(car a))(vl-string->list(car a)))
                                             a(cons(if(=(type m)'list)
                                                     (if(>(length m)1)(vl-list->string(list(car m)(op(last m))))
                                                       (chr(op(last m))))
                                                     (itoa(op m)))a)))))
                      (if a(LIST(car a))'(""))))(vl-remove""(strsplit str'("+"))))
        b(car a)a(cdr a)
        b(if a(foreach x a(setq b(append b x)))b)))
(defun strsplit(str splits / i a b)
  (while(<""str)
    (if(vl-remove'nil(mapcar'(lambda(x)(vl-string-search x str))splits))
      (setq i(car(vl-sort(vl-remove'nil(mapcar'(lambda(x)(if(setq l(vl-string-search x str))(cons l x)))splits))
                         '(lambda(s1 s2)(<(car s1)(car s2)))))
            a(cons(substr str 1(car i))a)b(cons(cdr i)b)
            str(substr str(+(car i)(strlen(cdr i))1)))
      (setq a(cons str a)b(cons "" b)str"")))
  (reverse a)) 
(tt"-5")->("5")
 (tt"50")->("50")
 (tt"5-")->("5")
 (tt"+5-")->("5")
 (tt"5+")->("5")
 (tt"-5+")->("5")
 (tt"5-21("5" "6" "7" "8" "9" "10" "11" "12" "13" "14" "15" "16" "17" "18" "19" "20" "21")
 (tt"31-15")->("31" "30" "29" "28" "27" "26" "25" "24" "23" "22" "21" "20" "19" "18" "17" "16" "15")
 (tt"31-15+A")->("31" "30" "29" "28" "27" "26" "25" "24" "23" "22" "21" "20" "19" "18" "17" "16" "15" "A")
 (tt"21-8+A-H")->("21" "20" "19" "18" "17" "16" "15" "14" "13" "12" "11" "10" "9" "8" "A" "B" "C" "D" "E" "F" "G" "H")
 (TT"+14-8+A-F+h-e")->("14" "13" "12" "11" "10" "9" "8" "A" "B" "C" "D" "E" "F" "h" "g" "f" "e")
 
 
 |