[過去ログ] C++相談室 part157 (1002レス)
1-

このスレッドは過去ログ倉庫に格納されています。
次スレ検索 歴削→次スレ 栞削→次スレ 過去ログメニュー
963
(1): 2021/11/13(土)18:03 ID:vJfZgOKN(2/3) AAS
>>959
utf32<->utf8
utf32<->utf16

どちらも std:: のは黒歴史
964
(1): ハノン ◆QZaw55cn4c 2021/11/13(土)18:39 ID:DyUYxUU0(3/3) AAS
>>963
そうなんですか…
なぜなんですか?
965: 2021/11/13(土)19:29 ID:vJfZgOKN(3/3) AAS
>>964
知ってるくせに
外部リンク[html]:cpprefjp.github.io
外部リンク[html]:cpprefjp.github.io
外部リンク[html]:cpprefjp.github.io
外部リンク[html]:cpprefjp.github.io
966: 2021/11/13(土)21:14 ID:aIrFEHKz(1) AAS
自分はHTML5の仕様に従って変換してます!
967: 2021/11/14(日)08:24 ID:gLhea8X6(1) AAS
>>959
結合文字列があるから、結局コードポイントに必ず1文字が対応しているとは限らないし、
何使ってもUnicodeは闇じゃないか。
まあ、UTF32使えばコードポイントがぶっ壊れることは避けられるけれども。
968: 2021/11/14(日)09:14 ID:ybz8bu8o(1) AAS
この場合同じコードポイントでの変換なわけだし一文字がどうとか関係ないが。
969: 2021/11/14(日)10:38 ID:G9ajtZXw(1/4) AAS
>>948
Perl/Ruby/JSなんかで正規表現を使って置換する場合でも、
同じようなアルゴリズムを使ってるはずだから、これが
特に非効率なわけではないし、代わりになるアルゴリズムで
これよりトータルで効率の良いものも恐らく存在しない。

1.例えば、0x0aと0x09の出現回数を最初に数えれば、必要な
 dstのバイト数を見積もることは可能だが、その場合は、
 二回もパースが必要になるし、プログラムも分かりにくくなる。
 二回パースすることによる速度低下も有る。

2.dstのサイズはsrcのサイズの2倍を越えないので、単純に
省3
970
(1): 2021/11/14(日)10:52 ID:G9ajtZXw(2/4) AAS
>>951
文字列のバッファは、不足すると2倍、2倍、・・・で確保されていくので
確保される回数は、最終的な文字列のバイト数を N としたとき、大体、
log2(N) 回程度となり、バッファがコピーされるトータルのバイト数は、
b = a + a*2 + a*2^2 + a* 2^3 + ... + a* 2^k
k = log2(N) 程度
a = 文字列クラスの内部バッファの初期バイト数。
となり、大体で言えば、2N を越えない。
1 + 2 + 2^2 + 2^3 + ... + 2^k
は 2進数で考えれば、全てのビットが 1 に成っている整数で、
省3
971
(1): 2021/11/14(日)10:59 ID:G9ajtZXw(3/4) AAS
>>970
1 + 2 + 2^2 + 2^3 + ... + 2^k
= Σ_{i=0}^k 2^i
= (1 - 2^{k+1}) / (1 - 2)
= 2^{k+1} - 1
である。途中、等比数列の和の公式:
等比数列の和 = 初項 * ( 1 - 公比^項数) - ( 1 - 公比 )
を用いた。
972: 2021/11/14(日)11:04 ID:G9ajtZXw(4/4) AAS
>>971
誤: 等比数列の和 = 初項 * ( 1 - 公比^項数) - ( 1 - 公比 )
正: 等比数列の和 = 初項 * ( 1 - 公比^項数) / ( 1 - 公比 )
973
(1): 2021/11/14(日)12:08 ID:p964tW2k(1/6) AAS
俺は数年前業を煮やして自前のstringクラスを作ってしまった(´・ω・`)
・sjis/utf8/utf16/utf32対応で比較・代入などどの組み合わせでも問題なく動く
・どの文字コードでも同じハッシュ値を生成する
・char型がsjisなのかutf8なのかはdefineで決める
・テンプレートベースのformatを用意してprintfを置き換え
みたいな
974
(1): 2021/11/14(日)12:57 ID:hL5WeBkj(1) AAS
>>973
保持するときのエンコードは?
975: 2021/11/14(日)12:58 ID:p964tW2k(2/6) AAS
>>974
文字コードの種類に1バイト用意して、後はそれぞれの文字コードで直接保存している
976
(1): 2021/11/14(日)13:30 ID:mwYTHPjW(1) AAS
えー
コンストラクタで各種文字コードのバイト列を受け取れるようにして内部保持形式はUTF32でよくない?
977: 2021/11/14(日)13:42 ID:p964tW2k(3/6) AAS
それだと大きめのテキストファイルを開いたときなどいちいち変換が入って遅くなりそうだから…といっても実際にはどっちが効率良いのかまでは比べてないけど
異なる文字コード同士比較する時なんかはコードポイント単位で読み出して結局utf32ベースで処理するしな…
978: 2021/11/14(日)13:44 ID:E00roTgy(1) AAS
>dstのサイズはsrcのサイズの2倍を越えない

しね
979: 2021/11/14(日)13:59 ID:5aeLrxCA(1) AAS
プログラマーは3種類しかいない
文字コードが分からない一般プログラマー
文字コードを理解したと勘違いしている地雷プログラマー
そして人類が文字コードを理解するのは不可能だと悟った上でなんとか事故が起こらないように心を砕く真の専門家だ
980: 2021/11/14(日)14:17 ID:p964tW2k(4/6) AAS
>>976
あーあとは、これのstring_viewバージョンがあって、関数のパラメータをconst mystring_view& strみたいに受けると、どんな対応してる文字なら(リテラルや対応してるクラス含めて)なんでも参照として受け付けるから便利なんだよね
981: 2021/11/14(日)14:59 ID:WpZMPVn+(1) AAS
それconst&いるんか?
982: 2021/11/14(日)15:13 ID:p964tW2k(5/6) AAS
実質的にはほとんどなにも変わらないと思うけど、無駄なコピーが減る場合もあるので付けておくに越したことはないと思う
1-
あと 20 レスあります
スレ情報 赤レス抽出 画像レス抽出 歴の未読スレ AAサムネイル

ぬこの手 ぬこTOP 0.030s