
A 回答 (4件)
- 最新から表示
- 回答順に表示
No.4
- 回答日時:
他の方の回答に補足する意味でアドバイスすることにします。
文字の判別は、<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')は文字コードの連続性が保証されていますが、アルファベットはそうではないので要注意です。
文字コードの判別は意外に難しい問題を持っていますね。
No.3
- 回答日時:
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さんがおっしゃってたキャラクタコードの
範囲での判断です。
No.2
- 回答日時:
#include <ctype.h>
で
アルファベット
int isalpha(char c);
大文字
int isupper(char c);
小文字
int islower(char c);
数字
int isdigit(char c);
英文字または数字
int isalnum(char c);
を使います
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) セルに入力した小文字アルファベット、数字を大文字表示させるには? 3 2022/07/13 10:01
- 高校 数学Aの問題です。 下記2パーンのとき、それぞれ何通りありますか? ①アルファベット大文字小文字のい 3 2023/02/08 16:32
- C言語・C++・C# c言語 プログラムのエラー 1 2023/02/11 20:31
- C言語・C++・C# C言語のエラーについて 2 2022/07/11 13:56
- C言語・C++・C# C#の問題です。 文字列型の配列 s[100] にキーボードから入力された100文字以内の文字列(単 2 2022/06/22 15:18
- C言語・C++・C# C言語で 英文字のみからなる文字列、”Radar”、”WasItACatISaw”、”a”、””(空 5 2022/12/20 15:17
- C言語・C++・C# str[j++]の意味 2 2022/08/30 16:20
- Access(アクセス) capeofdragonと申します。 Access2016を使っております。 あるフォームがあり、テ 2 2022/09/09 13:18
- Excel(エクセル) Excelの空文字判定について 7 2023/01/06 13:25
- C言語・C++・C# C言語の質問です、プログラミング初心者です このような文字列があった場合 "abcdef☆ghijk 4 2022/11/22 10:56
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
sscanfとscanfの違いがよくわか...
-
fgetsとsscanfを使って一行から...
-
文字列中に含まれる文字の個数...
-
Cで「大文字、小文字の判定」は...
-
教えていただけませんか?C言語...
-
charと%c , %s の関係について
-
メニューバーでクリックした個...
-
fgets関数を使用したときの文字...
-
C言語の文字に関する初歩的な質...
-
C言語の勉強しています。すみま...
-
fgetsで拾われる改行文字を削除...
-
C言語で16進数文字列から16進数...
-
if文の判定条件('||'と'&&'の使...
-
CStringのFindで文字列検索を行...
-
C言語で可変長から固定長に変換...
-
「指定されたキャストは有効で...
-
「Aに対するBの割合」と「Aに対...
-
Enterキーを押されたら次の処理...
-
*をユーザーが入力した数字の数...
-
マイナスからプラスへ転じた時...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
CStringのFindで文字列検索を行...
-
fgetsで拾われる改行文字を削除...
-
sscanfとscanfの違いがよくわか...
-
反転した数値を表示させるやり方
-
charと%c , %s の関係について
-
fgets関数を使用したときの文字...
-
Cで「大文字、小文字の判定」は...
-
strstrを利用しない文字列検索...
-
文字列中に含まれる文字の個数...
-
C言語のステップ数をカウントす...
-
itoaわかりません
-
C++
-
C/C++言語で日本語処理
-
C言語 空白の行(改行のみ)が...
-
CStringについて
-
小文字のみを数える方法
-
教えていただけませんか?C言語...
-
ブランクのチェック
-
str[j++]の意味
-
初歩的なプログラムなんですが...
おすすめ情報