challenge 文字列のセンタリング

文字列を指定のカラム幅にセンタリング配置する関数を示してください。文字列の長さが指定した幅より長い場合には文字列の両端をできるだけ均等に切り落して指定幅に収めてください。1文字は1カラムに収まるものと仮定してかまいません。

Posted feedbacks - Common Lisp

CL の format で。もっときれいに書けそうですが。
1
2
3
4
5
(defun center (str &optional (width 80))
  (let ((margin (- (length str) width)))
    (if (> margin 0)
        (format t "~a" (subseq str (floor (/ margin 2)) (+ width (floor (/ margin 2)))))
      (format t (format nil "~~~a:@<~~a~~>" width) str))))

kozima さん、ご指摘感謝です。
format での~v ってよく調べたら基本的機能なのですね。参考になりました。
1
2
3
4
5
6
(defun center (str &optional (width 80))
  (let ((margin (- (length str) width)))
    (format t "~v:@<~a~>" width 
        (if (> margin 0)
        (subseq str (floor (/ margin 2)) (+ width (floor (/ margin 2))))
          str))))

Index

Feed

Other

Link

Pathtraq

loading...