■ ユニコードで、文字列を1文字づつ半角か全角かを見分けるには

[Visual C++ Q & A 掲示板] [過去ログの一覧]


猫ち 2008/01/18(金) 13:24:25 <初心者>
.Net2005 vista MFCです。

ユニコード文字列で、1文字づつ半角か全角かを見分けるには、どうしたらいいでしょうか。
過去ログを見て、CLRではTextWidthメソッドを使う、というような質疑があったのですが、MFCでは見つかりませんでした。

よろしくお願いします。

Blue 2008/01/18(金) 14:14:19
何を基準に全角・半角としますか?

Shift_JISコードのときに2バイト使うってことであれば、MFCなら
CStringAクラスを使って確認できます。
(WideCharToMultiByte関数でもできます。)


何かに表示するときの幅であれば、表示するデバイスコンテキストを使って、実際横幅がいくつになるのか
は確認できます。

Blue 2008/01/18(金) 14:15:20
書き忘れ
>Shift_JISコードのときに2バイト使うってことであれば
はShift_JISコードで表示できないものは使えません。

επιστημη [HomePage] 2008/01/18(金) 16:51:10
半角=1byte文字としてよいのなら、
どうがんばっても256個しかないんだから、
半角文字一覧をこしらえといて、
それに載ってるかを調べるんでもいいかも。

n 2008/01/20(日) 14:07:38
使ったこと無いけど GetStringTypeEx() は?

猫ち 2008/01/20(日) 20:24:44 <初心者>
Blueさん、επιστημηさん、nさん、たいへんありがとうございました。

ご指摘の通り、印刷の幅を揃えたくて、質問しました。

επιστημηさんのおっしゃるように配列にしようかと思ったのですが、あちこちくぐって、_istasciiと_istalnumの組み合わせで解決しました。
漏れがあったら個別に対応しようと思ったのですが、今のところ大丈夫そうです。

たいへんお騒がせしました。

毎週金曜日はポイント最大3倍!さらに4倍のチャンスも!

Programming Library