KONOTI

この世界で得た知識・情報まとめ

【C++】文字or数字を判定するisdigit関数の使い方

  • 作成日:2024/10/24

C++で文字か数字かを判別する方法です。

isdigit関数とは

引数で渡した値が、数字なのか文字なのかを判別する関数です。

リファレンス

int isdigit(int ch);
                        
【仕様】

引数が数字の場合は0以外を返し、文字の場合は0を返す

【引数】
  • ch:判別したい文字

引数の型がintなのに渡すのは文字なの?という疑問は後述します。まずは「引数には判別したい文字を渡す」と認識ください。

使い方

以下のサンプルは、入力した値が文字か数字かを判別するコードです。

C++

#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系関数はいくつかありますが、これと同じような感じです。

複数の文字(文字列)を判別する方法

以下のサンプルは、文字列を判別するコードです。

C++

#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

この記事のシェアはこちらから

当サイトについて

当サイト(KONOTI)は、日常生活において運営者が得た情報をご紹介するサイトです。 ジャンルに多少の偏りはありますが、基本的には様々な情報を取り扱っていく予定です。

Contact

当サイトへのご連絡は以下よりお願いします。

PAGE TOP ▲

© Copyright 2024 KONOTI