C言語関係掲示板

過去ログ

No.1052 半角カナ(JIS X 0201「片仮名用図形文字集合」)の判定

[戻る] [ホームページ]
No.13709

半角カナについて
投稿者---たかはし(2004/04/23 17:07:02)


こんにちは。C言語ど素人のたかはしです。

DOSプロンプトから文字を受け取って、それをif文で判定して、条件にそっていれば(例えば半角英数字8文字以内)、処理をするプログラムを作っています。
そのif文の判定に関してわからないことがあります。
今、半角カナ以外の場合は処理を続けるようにしたいのですが、どうもうまくいきません。
if ((0x21==*(p+i)) && (0x5F==*(p+i)))
printf("\n***半角カナ以外を入力してください***\n\n");

上記のように作っていますが、全角文字もこの条件文を通ってしまいます。
文字コード JIS7です。全角の文字コードは0x21〜0x7Eなので、上記の条件文ではだめなのはわかっていますが、同様にしたらいいかわからなくて困っています。
何かよい方法はありますでしょうか?
宜しくお願いします。


No.13710

Re:半角カナについて
投稿者---YuO(2004/04/23 17:41:12)


まともな用語を使ってください。

「半角カナ」とは何ですか?
とりあえず,JIS X 0201で定義される「片仮名用図形文字集合」と仮定します。

「JIS7」とは何ですか?
とりあえず,JIS X 0202を7bit系で使い,
さらにGLにG0を呼び出した状態で使い,
文字集合は全てG0のみに呼び出すものと仮定します。


>今、半角カナ以外の場合は処理を続けるようにしたいのですが、どうもうまくいきません。
>if ((0x21==*(p+i)) && (0x5F==*(p+i)))
>printf("\n***半角カナ以外を入力してください***\n\n");

p及びiの型は何ですか?
まぁ,どちらにしてもこの条件文は常に偽となりますが。
p[i]が0x21であれば,0x5F == *(p + i)は常に偽ですし,
p[i]が0x5Fであれば,0x21 == *(p + i)は常に偽です。


>上記のように作っていますが、全角文字もこの条件文を通ってしまいます。
>文字コード JIS7です。全角の文字コードは0x21〜0x7Eなので、上記の条件文ではだめなのはわかっていますが、同様にしたらいいかわからなくて困っています。
>何かよい方法はありますでしょうか?

JIS X 0201の片仮名用図形文字集合をG0に呼び出すエスケープシーケンスESC 2/8 4/9が見つかるか,
JIS X 0201の片仮名用図形文字集合を呼び出した領域をGLに呼び出すシーケンスが見つかった後,
他の文字集合がGLに呼び出すシーケンスが見つかるまでにGLの文字を利用した場合,
というのがエラー条件だと思います。

JIS X 0202は基本的に状態を持つので,
ちゃんと状態管理をしてやればそれほど難しくないと思いますよ。



No.13772

Re:半角カナについて
投稿者---たかはし(2004/04/26 17:00:36)


>JIS X 0201の片仮名用図形文字集合をG0に呼び出すエスケープシーケンスESC 2/8 4/9が見つかるか,
>JIS X 0201の片仮名用図形文字集合を呼び出した領域をGLに呼び出すシーケンスが見つかった後,
>他の文字集合がGLに呼び出すシーケンスが見つかるまでにGLの文字を利用した場合,
>というのがエラー条件だと思います。

どのようにしてやるんでしょうか?
ちょっとまだエスケープシーケンスとかよくわかってないので、
できれば具体的に教えていただけるとありがたいです。
すいませんが、宜しくお願いします。




No.13711

Re:半角カナについて
投稿者---Cマニア(2004/04/23 17:50:08)


>if ((0x21==*(p+i)) && (0x5F==*(p+i)))
>printf("\n***半角カナ以外を入力してください***\n\n");

 ↑は、*(p+i)が 0x21 かつ 0x5F という式で、
 これが真になることはあり得ないんじゃないかなと思います(^_^;)

 それから半角カナの文字コードは何でしょうか???
 半角カナを0x21〜0x5Fまでだと仮定すると、
if( (*(p+i) >= 0x21) && (*(p+i) <= 0x5F) ){
    printf("\n***半角カナ以外を入力してください***\n\n");
こんな感じでできると思いますよ。
これは、*(p+i)が0x21以上で、0x5F以下という式です。


No.13765

Re:半角カナについて
投稿者---たかはし(2004/04/26 09:06:09)


回答ありがとうございます。
すいません、まだ初心者なもので、用語をしっかりと把握してませんでした。
また質問するかもしれませんので、宜しくお願いします。