『文字のセンタリング』投稿

どう書く?orgに投稿。

お題は文字のセンタリングです。

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

最初、文字列と幅を比較して、幅に収まるようなら前後にスペースをWhileで追加、幅を超えるようなら前後をWhileで切り飛ばしていくという力任せ的なコード書いたんですけど、マニュアル読んだらPHPには本件にうってつけの関数が既に用意されていました。 str_padは前後にスペース(文字種指定可)を追加するのみでなく、文字列の切り飛ばしも行ってくれるのですが、今回のお題のように「前後から均等に」という仕様ではないのでifで処理分けてます。

以下投稿したコード。選択した言語はPHP。シンプルでわかりやすいと思う。

<?php  
function Centering($str, $width)  
{  
    $slen = strlen($str);  
    if ($slen < $width) {  
        $str = str_pad($str, $width,  , STR_PAD_BOTH);  
    } else {  
        $str = substr($str, (int)(($slen  $width)/2), $width);  
    }  
    return $str;  
}  
?>