【C++】文字or数字を判定するisdigit関数の使い方
- 作成日:2024/10/24
C++で文字か数字かを判別する方法です。
isdigit関数とは
引数で渡した値が、数字なのか文字なのかを判別する関数です。
int isdigit(int ch);
引数が数字の場合は0以外を返し、文字の場合は0を返す
- ch:判別したい文字
引数の型がintなのに渡すのは文字なの?という疑問は後述します。まずは「引数には判別したい文字を渡す」と認識ください。
使い方
以下のサンプルは、入力した値が文字か数字かを判別するコードです。
#include <iostream>
using namespace std;
int main()
{
char ch;
//入力
cin >> ch;
//数字判定
if (isdigit((unsigned char)ch)!=0)
{
cout << "数字" << endl;
} else {
cout << "文字" << endl;
}
return 0;
}
cin関数で入力したものをch変数に格納し、それをisdigitの引数に渡して判定しています。
引数はunsigned charでキャストします。理由は次章で解説します。
引数についてより詳しく解説
isdigit関数の引数はint型ですが、この関数は文字を渡すとint型に変換して処理をするため、文字指定でも問題ありません。
そして、文字の型にはsigned charとunsigned charの2種類があります。
種類 | 扱える整数の範囲 |
---|---|
signed char | −128~127 |
unsigned char | 0~255 |
上記の通り、この2つは扱える整数が異なります。
isdigit関数は引数がunsigned charの場合またはEOF(-1)の場合に正しい動作が保証されているため、 引数の文字をunsigned charでキャストする必要があるのです。
ちなみに、isdigit関数以外にもis系関数はいくつかありますが、これと同じような感じです。
複数の文字(文字列)を判別する方法
以下のサンプルは、文字列を判別するコードです。
#include <iostream>
using namespace std;
int main()
{
string ch = "abc123";
// 文字数分ループする
for (int i = 0; i < ch.length()-1; i++)
{
// 数字判定
if (isdigit((unsigned char)ch[i]) != 0)
{
cout << "i番目の数字は:" << ch[i] << endl;
}
else
{
cout << "i番目の文字は:" << ch[i] << endl;
}
}
return 0;
}
このように、文字列の数字判定はループ処理で1文字ずつ判別していきます。
i番目の文字は:a
i番目の文字は:b
i番目の文字は:c
i番目の文字は:1
i番目の文字は:2
i番目の文字は:3