文字列の反転
Posted feedbacks - OCaml
ascii文字でない場合のみ指定バイト分で移動させます。
確認方法が分からないのでsjisで大丈夫かは分かりません。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #load "str.cma";;
open Str;;
let check_ascii str (pos:int) =
(string_match (regexp "[\000-\127]") str pos);;
let revstr_nbyte ?(byte=3) str =
let len = String.length str in
let newstr = String.create len in
let rec loop i k () =
if i<1 then newstr
else
if (check_ascii str k) then
loop (i-1) (k+1) (newstr.[i-1] <- str.[k])
else
loop (i-byte) (k+byte) (String.blit str k newstr (i-byte) byte)
in loop (len) 0 ();;
let (pr, strev) = (print_endline, revstr_nbyte) in
pr (strev "Hello");
pr (strev "こんにちは");
pr (strev "濁点(だくてん)");;
|


にしお
#3414()
Rating0/2=0.00
サンプル入出力
>>> print reverse_string("Hello") olleH >>> print reverse_string("こんにちは") はちにんこ >>> print reverse_string("濁点(だくてん)") )んてくだ(点濁[ reply ]