2014年07月23日

C#で文字列のセンタリング

   このエントリーをはてなブックマークに追加 Clip to Evernote
どう書く?orgに感謝を込めて」シリーズ その27

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

センタリングといってもCUIベースのセンタリングです。
こういったコードは、もう書くことはないのかな?
ASCII文字だけを対象とした、Centeringメソッドを書いてみました。
Mainメソッドでは、12のケースで正しくセンタリングできるか確認しています。


■C#で書いたコード
using System;

namespace Doukaku.Org {
    class Program {
        static void Main(string[] args) {
            string[] strs = {
                                "1",
                                "12",
                                "123",
                                "1234",
                                "12345",
                                "123456",
                                "1234567",
                                "1234567890",
                                "12345678901",
                                "123456789012",
                                "1234567890123",
                                "12345678901234",
                            };
            foreach (var s in strs) {
                Console.WriteLine("<{0}>",Centering(s, 10));
            }
            Console.ReadLine();
        }

        // 文字列が表示幅より短ければ、左側と右側に何文字の空白が必要なのかを計算する。
        // 文字列が表示幅より長ければ、何文字目から表示するのかを計算する。
        static string Centering(string s, int width) {
            int space = width - s.Length;
            if (space >= 0) {
                return new string(' ', space / 2) + s + new string(' ', space - (space / 2));
            } else {
                return s.Substring(-space / 2).Remove(width);
            }
        }
    }
}


 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52378187