susu #5560(2008/01/30 02:35 GMT) [ OCaml ] Rating0/0=0.00
asciiカッコのみ対応です。日本語カッコは常に反転されます。
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 31 32 33 34 35 36 37 38
let trade arr i j = let get,set = String.get,String.set in let carry x y = set arr i y; set arr j x in carry (get arr i) (get arr j);; module MBstr = struct let byte = ref 3 let char_size = function | '\000'..'\127' -> 1 | _ -> !byte;; let rev s = let len = String.length s in let res = String.create len in let rec loop i j = if i>=len then res else ( let size = char_size s.[i] in String.blit s i res (j-size) size; loop (i+size) (j-size) ) in loop 0 len;; let rev_brackets op cl s = let len = String.length s in let rec loop i acc = if i>=len then s else loop (char_size s.[i] + i) ( if String.contains op s.[i] then (i::acc) else ( try (if op.[String.index cl s.[i]] = s.[List.hd acc] then trade s (List.hd acc) i); List.tl acc with Not_found | Failure _ -> acc )) in loop 0 [];; end;; let reverse_string2 s = print_endline (MBstr.rev_brackets ")]}" "([{" (MBstr.rev s));;
Rating0/0=0.00-0+
[ reply ]
susu
#5560()
[
OCaml
]
Rating0/0=0.00
asciiカッコのみ対応です。日本語カッコは常に反転されます。
Rating0/0=0.00-0+
[ reply ]