C/C++でマルチバイト文字

このエントリーをはてなブックマークに追加
1名無しさん@お腹いっぱい。
を使うとき皆さんはどうしていますか?
2名無しさん@お腹いっぱい。:2000/08/23(水) 13:25
中身がマルチバイト文字のstringクラスでは、
find_first_ofなどのメンバ関数はきちんと動いてくれるのでしょうか?
運がいいのか、今のところ問題は起きていないのですが、
気になって夜も眠れません。
3名無しさん@お腹いっぱい。:2000/08/23(水) 13:29
basic_string<whchar_t>でも使ったら?
42:2000/08/23(水) 14:12
wstringのことですか?
う〜ん、うにコードはちょっと・・・。
と思ってしまうので、マルチバイトでがんばりたいのですが・・・。
5名無しさん@お腹いっぱい。:2000/08/23(水) 14:20
>>2
そんなこと考慮されてない。

SJISとかEUCで使うんだろ?
それなら、第一バイト、第二バイトとかの判定するだけじゃん。
自分で拡張しよう。

力業では、UNICODE-マルチバイトの変換テーブルもって、
必要なときだけUNICODEになおして処理するとか。

つーか、CStringとかAnsiStringなら、ロケールを考慮して
くれるんだから、素直にそういうの使えば?
62>5:2000/08/23(水) 15:18
やっぱそうですか・・・。
頑張って自分でアトリビュート書くか、拡張するかしてみます。
"AnsiString"は使える環境にないし、
"CString"は"operator LPCSTR ()"あたりが嫌いなので。
7名無しさん@お腹いっぱい。:2000/08/23(水) 16:27
isDBCSLeadByteExは?
8名無しさん@お腹いっぱい。:2000/08/23(水) 17:30
CString はMBCSに就いてはかなりバカです。
使えません。
92:2000/08/23(水) 21:26
>7
できれば標準basic_stringから離れたくないもので・・・。

自分的には、
  @あきらめてwstringを使う。
  Aがんばってアトリビュートを書く。
  Bアトリビュートにダミーをかましてテンプレートを特化する。
あたりかなぁと思っているんですが、
Aに関しては自分の現在のスキルではとても無理だし、
Bに関してはなんかすごく気持ち悪いのです。
どうなんでしょう?

もう少し、うにコードの規格がしっかりしてくれていればなぁ・・・。
10名無しさん@お腹いっぱい。:2000/08/24(木) 08:37
>string
>typedef basic_string<char> string;
>この型は、char 型の要素に対してテンプレート クラス basic_string を専用化したクラスを定義します。
>
>wstring
>typedef basic_string<wchar_t> wstring;
>この型は、wchar_t 型の要素のためにテンプレート クラス basic_string を専用化したものです。

stringも、wstringともにbasic_stringなんだけど。。。
11>10:2000/08/24(木) 12:39
言いたいことがよくわからないんですけど・・・。

stringはマルチバイト文字の先導バイトを気にしなきゃいけないけど、
wstringはUNICODEなので、先導バイトを気にする必要がありません。
ただし、UNICODEは漢字の字体がいまいちなのです。
12名無しさん@お腹いっぱい。:2000/08/24(木) 13:33
>ただし、UNICODEは漢字の字体がいまいちなのです。
が意味が良く分からないんだけど、まさかフォントのことを言ってるんじゃないよね?
13これでも使っとけ:2000/08/24(木) 16:18
#define isjis(c) (((c)>=0x21 && (c)<=0x7e))
#define iseuc(c) (((c)>=0xa1 && (c)<=0xfe))
#define issjis1(c) (((c)>=0x81 && (c)<=0x9f) || ((c)>=0xe0 && (c)<=0xef))
#define issjis2(c) ((c)>=0x40 && (c)<=0xfc && (c)!=0x7f)
#define ishankana(c) ((c)>=0xa0 && (c)<=0xdf)
14>13:2000/08/24(木) 19:37
ちょっといいヤツだな。
152:2000/08/25(金) 00:13
>12
UNICODEでは漢字の符号空間が狭いから、
似たような漢字がひとまとめにされるというのがいやだなぁ、ということです。

>13
どうもです。
ただ、そういうことではなくbasic_stringでマルチバイトを扱いたいなぁと思って。
16名無しさん@お腹いっぱい。:2000/08/25(金) 00:23
2は逝ってよし!
172:2000/08/25(金) 02:29
実はUNICODEなんて実際に使ったことはありませんでした。
雑誌のなんかの読みかじりの知識で知ったかぶりをしてました。
ごめんなさい。
18名無しさん@お腹いっぱい。 :2000/08/25(金) 08:22
どっちにしてもbasic_stringを継承して
日本語を意識するようにしたクラスを作るしかないな。
19名無しさん@お腹いっぱい。 :2000/08/25(金) 09:20
ちなみにUNICODEの変換は、自分でテーブルを作らなくても
Winならsprintf系で出来るよ
20名無しさん@お腹いっぱい。 :2000/08/25(金) 11:43
Linux系でもmbtowcで出来ます。
ただ、それが「UNICODEだ」とは
書きたくないらしく、
「ワイド」と表現してます(−−;)。

#白状しろというツッコミは禁止
21本物の2
>18
まともなレスをどうも。
find系のメンバ関数が仮想関数なら迷わず継承するんですが、
非仮想なのでそれは見送りました。

とりあえず、この板ではこれ以上の情報は得られそうにないので、
このスレは終了でいいです。
皆さん意外と原始的な方法を使っているんだということが判っただけでも収穫でした。
まともなレスをつけてくれた皆さんどうもありがとうございました。
最終的にbasic_stringを特化していくことにしました。

********************終了********************