文字列のセンタリング
Posted feedbacks - HSP
対象文字列の長さによって分岐しています。 露骨すぎてスマートとは言えないでしょう。
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 26 27 28 29 30 | #runtime "hsp3cl"
#module
#defcfunc spaces int len
if len <= 0 : return ""
sdim s, len + 1
repeat len
poke s, cnt, ' '
loop
return s
#defcfunc centered_text str target, int len
if len <= 0 : return ""
target_length = strlen(target)
result = target
if target_length < len {
result = spaces((len - target_length)/2) + target + spaces((len - target_length + 1)/2)
} else : if target_length > len {
result = strmid(result, (target_length - len)/2, len)
}
return result
#global
s = "*"
repeat 10
mes centered_text(s, 15)
s += " *"
loop
stop
|
より単純なスクリプトです。 まず指定された長さの半角スペース列を用意し、次に文字列をpokeで書きこんでいます。
1 2 3 4 5 6 7 8 9 10 11 | #module
#defcfunc centered_text str _source, int len
if len <= 0 : return ""
source = _source
source_strlen = strlen(source)
sdim result, len + 1
memset result, ' ', len
poke result, limit((len - source_strlen)/2, 0, len/2), strmid(source, limit((source_strlen - len)/2, 0, source_strlen), len)
return result
#global
|




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