文字列の半角と全角の区別

解決


origi  2005-01-08 08:38:39  No: 55952  IP: [192.*.*.*]

いま、「ABC」とか「あいう」とかがごちゃ混ぜになった文字列から、
半角なら半角、全角なら全角を一文字ずつ取り出したいのですがうまくいきません。
なにかいい方法はないでしょうか?

編集    削除
RAPT  2005-01-08 10:39:55  No: 55953  IP: [192.*.*.*]

開発環境は?
対象文字コードは?

> うまくいきません。
「何が」?

編集    削除
origi  2005-01-08 16:56:03  No: 55954  IP: [192.*.*.*]

説明不足でした。
環境はVisual C++ 2003 で、文字コードはASCIIコードです。
うまくいかないとは、文字を一文字ずつ取り出しだして、画面に表示させようとしたところ、
配列を一つずつ参照してみると、全角のときにまず文字が表示できない変な文字が表示され、
二回目にちゃんと全角が表示されます。
このときに、全角だったら一気に2つ、半角だったら1つと配列を参照したいのですが、
どうすればそのような区別ができるでしょうか?

編集    削除
シャノン  2005-01-08 18:05:01  No: 55955  IP: [192.*.*.*]

ASCII コードに「あいう」などという文字はありません。
Shift-JIS コードの間違いでしょうか?

Shift-JIS コードでは、先行バイトは 0x81 〜 0x9f と 0xe0 〜 0xfc の範囲になります。
この範囲に半角文字は含まれませんので、1バイト読んでこの範囲に無ければ取り出し、この範囲にあれば貯めておいて、次のバイトと結合して取り出し、という処理になります。

編集    削除
origi  2005-01-08 23:45:54  No: 55956  IP: [192.*.*.*]

シャノンさん、ありがとうございます。
一応主な文字の0 〜 0x81位しか使わないので、その範囲でやってみたところ、
うまくいきました。
ありがとうございました。

編集    削除