kozima #3521(2007/10/25 14:35 GMT) [ Common Lisp ] Rating0/0=0.00
とりあえずそのままひっくり返して、対応してた括弧は後で入れ換え。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
(defun reverse-string2 (string) (loop with str = (reverse string) and stack for c across str and i from 0 do (case c ((#\) #\] #\}) (push (cons c i) stack)) ((#\( #\[ #\{) (if (eql (caar stack) (elt ")]}" (position c "([{"))) (progn (rotatef (elt str i) (elt str (cdar stack))) (setf stack (cdr stack))) (setf stack ())))) finally (return str))) ;;; test (defun test (s1 s2) (format t "~:[NG~;OK~]~%" (string= (reverse-string2 s1) s2))) (mapc #'test '("文字列(もじれつ)の反転(はんてん)" "対応[の{とれている(さまざまな)括弧}の(例)]です。" "これ(は(対応のとれていない)括弧がある例です。" "これ(も{対応の)とれていない}括弧の例です。") '("(んてんは)転反の(つれじも)列字文" "。すで[(例)の{弧括(なまざまさ)るいてれと}の]応対" "。すで例るあが弧括(いないてれとの応対)は(れこ" "。すで例の弧括}いないてれと)の応対{も(れこ"))
Rating0/0=0.00-0+
[ reply ]
kozima
#3521()
[
Common Lisp
]
Rating0/0=0.00
(defun reverse-string2 (string) (loop with str = (reverse string) and stack for c across str and i from 0 do (case c ((#\) #\] #\}) (push (cons c i) stack)) ((#\( #\[ #\{) (if (eql (caar stack) (elt ")]}" (position c "([{"))) (progn (rotatef (elt str i) (elt str (cdar stack))) (setf stack (cdr stack))) (setf stack ())))) finally (return str))) ;;; test (defun test (s1 s2) (format t "~:[NG~;OK~]~%" (string= (reverse-string2 s1) s2))) (mapc #'test '("文字列(もじれつ)の反転(はんてん)" "対応[の{とれている(さまざまな)括弧}の(例)]です。" "これ(は(対応のとれていない)括弧がある例です。" "これ(も{対応の)とれていない}括弧の例です。") '("(んてんは)転反の(つれじも)列字文" "。すで[(例)の{弧括(なまざまさ)るいてれと}の]応対" "。すで例るあが弧括(いないてれとの応対)は(れこ" "。すで例の弧括}いないてれと)の応対{も(れこ"))Rating0/0=0.00-0+
[ reply ]