私自身が表題の問題を解いた時のプログラムについて解説します。
問題の詳細は「右位置揃え」(CodeIQ)を参照してください。
【問題】
息抜き時間でできる、簡単なプログラムを書いてみよう!
改行区切りの文字列の各行は、半角数字のみの整数(最大桁数32)になっています。
この各行の先頭に任意の数の半角のアンダーバー(_)を挿入して、右揃えになるように加工して下さい。
ただし、最も桁数が多い数値の先頭には、半角のアンダーバーを挿入しないものとします。
// 入力例
1
23
45678
9
10
// 出力例
____1
___23
45678
____9
___10
Rubyで解答しています。
#!/usr/bin/ruby # main strs = [] szs = [] def printRight(strs, mx) for s in strs sp = mx - s.size puts '_' * sp + s end end while line = gets line.strip! next if line.empty? strs << line szs << line.size end printRight(strs, szs.max)
息抜きとある通り、簡単な問題です。
入力値の中でもっとも長い文字列の長さを求め、それ以外の文字列について最長との差だけ'_'で左側を埋めて印字すれば良いだけです。
入力値を取得し配列strsに保持しつつ、各文字列の長さをszsに記録します。
strsとszsの中で最大の値をprintRight()に渡して印字します。
strsから入力値を1行ずつ取り出し、その文字列と最長文字列数mxとの差を求めます。そして、その数だけ'_'を入力値の前につけて印字するだけです。
C言語のprintf()は0ないし空白のパディングは簡単にできるけど、任意の文字でパディングってできるんだっけ?