- 締切済み
C言語の文字に関する初歩的な質問です。
文字列を入力させて1文字ずつその文字が大文字か小文字か、 またアルファベットか数字かそれ以外の文字かを判定する方法がわかりません。 わかる方教えてください。
- みんなの回答 (4)
- 専門家の回答
みんなの回答
- jacta
- ベストアンサー率26% (845/3158)
他の方の回答に補足する意味でアドバイスすることにします。 文字の判別は、<ctype.h>ヘッダで宣言されているis~という関数を使います。大文字かどうかの判別であればisupperを使うといった具合です。 is~系の関数は次のような形式になっています。 int isupper(int c); 注意しないといけないのは、引数がint型だということです。これは、getcなどの返却値をそのまま渡すとき、EOF(負の値)が渡される可能性があるからです。そして、全うな文字の場合は、0~UCHAR_MAXの間の値でなければなりません。 今回は文字列として入力してから1文字ずつ判別するとのことですので、is~系関数に渡すときはunsigned charでキャストしてやらないと、プログラムがクラッシュする場合があります。 もし、入力文字列にマルチバイト文字が含まれる場合は少々厄介です。可能であれば、fgetwcなどを使ってワイド文字列として入力してから、iswupperのようなisw~系の関数で判別した方がよいでしょう。処理に先駆けて、setlocaleでLC_CTYPEカテゴリのロケールを設定することを忘れないでください。 何らかの理由でis~系(またはisw~系)関数を使用せず、自作する場合ですが、数字('0'~'9')は文字コードの連続性が保証されていますが、アルファベットはそうではないので要注意です。 文字コードの判別は意外に難しい問題を持っていますね。
- heilheil
- ベストアンサー率66% (4/6)
summaliaさんがどのような目的でこの方法を質問されたのかがわからないので、 私もヒントをということで... 1) C言語には標準ライブラリという関数群がありますよね? それを使います。 stdio.hとかstring.hとかctype.hという中にいろいろと入ってます。 # getなんちゃらとかstrなんちゃらとかisなんちゃら... 2) 文字列の入力は標準ライブラリの関数で行い、判定を直接行う。 擬似的に書くとこんな感じでしょうか。 判定 = 不明; for (int i=0; i < 文字列の長さ; i++) { 一文字取り出し; if ((文字 >= '0') かつ (文字 <= '9')) { 判定 = 数字; } else if ( ... あとは省略 } } if とあるところがNo.1さんがおっしゃってたキャラクタコードの 範囲での判断です。
- BLUEPIXY
- ベストアンサー率50% (3003/5914)
#include <ctype.h> で アルファベット int isalpha(char c); 大文字 int isupper(char c); 小文字 int islower(char c); 数字 int isdigit(char c); 英文字または数字 int isalnum(char c); を使います
- denbee
- ベストアンサー率28% (192/671)
ヒントだけ。 各文字はキャラクターコードを持っていますので、 そのキャラクターコードの範囲で判断すればよろしいかと思います。