[過去ログ]
プログラミングのお題スレ Part21 (1002レス)
プログラミングのお題スレ Part21 http://mevius.5ch.net/test/read.cgi/tech/1668333636/
上
下
前次
1-
新
通常表示
512バイト分割
レス栞
抽出解除
レス栞
このスレッドは過去ログ倉庫に格納されています。
次スレ検索
歴削→次スレ
栞削→次スレ
過去ログメニュー
リロード規制
です。10分ほどで解除するので、
他のブラウザ
へ避難してください。
726: 638 [sage] 2023/06/05(月) 21:35:18.29 ID:4V5NjjYa >>722 Perl5 スマソ、ビューワーから書き込んだら丸数字の一部が文字化けしたのでブラウザから再書き込み use feature qw{signatures say}; use utf8; binmode STDOUT => 'utf8'; use Encode 'encode'; sub f($s) { @s = split '', $s; %h = map{unpack('H*', encode('utf-8', $_)) => $_} @s; @i = reverse @c = sort keys %h; %o = map{$h{$c[$_]} => $h{$i[$_]}} 0..$#c; say map{$o{$_}} @s; } f 'HELLO WORLD'; f '????????㉔???㉒?????㉓???㉑?'; 実行結果 $ perl 21_722.pl LOHHEW EDHR ???㉓?????㉔????㉑?????㉒??? http://mevius.5ch.net/test/read.cgi/tech/1668333636/726
728: 638 [sage] 2023/06/06(火) 01:24:29.34 ID:gRU+jG8g >>726 しくった utf-8文字を可変長16進数にunpackして辞書的順番でsortするので、例題では意図した通りの結果を得られたが、 半角と全角などutf-8でバイト数の異なる文字が混在する文字列の場合には、順番が違ってくるだろうな… http://mevius.5ch.net/test/read.cgi/tech/1668333636/728
729: 638 [sage] 2023/06/06(火) 02:40:16.03 ID:gRU+jG8g >>726 Perlで文字の数値コードを返すord()関数は半角文字の場合にASCIIコードを返すが、 全角Unicode文字ではコードポイントを返す、ということなので、素直にそれを使い、 文字列としてっではなく数値としてsortし %h = map{unpack('H*', encode('utf-8', $_)) => $_} @s; @i = reverse @c = sort keys %h; ↓を %h = map{ord($_) => $_} @s; @i = reverse @c = sort{$a <=> $b} keys %h; と修正するのがよさげ。連投スマソ http://mevius.5ch.net/test/read.cgi/tech/1668333636/729
メモ帳
(0/65535文字)
上
下
前次
1-
新
書
関
写
板
覧
索
設
栞
歴
スレ情報
赤レス抽出
画像レス抽出
歴の未読スレ
AAサムネイル
Google検索
Wikipedia
ぬこの手
ぬこTOP
0.044s