C/C++で文字列がint(整数)かどうかを判定する方法
C/C++で文字列が整数(int)として妥当かどうかを判定する方法はいくつかあります。その中でも手軽なのが、標準ライブラリのisdigit()関数を使って文字列を1文字ずつチェックする方法です。
ここでは、C++で文字列が整数を含んでいるかどうかを判定する具体例を紹介します。
サンプルコード
#include<iostream>
#include<string.h>
using namespace std;
int main() {
char str[] = "3257fg";
for (int i = 0; i < strlen(str); i++) {
if(isdigit(str[i]))
cout<<"この文字列には整数が含まれています\n";
else
cout<<"この文字列には整数が含まれていません\n";
}
return 0;
}実行結果
プログラムを実行すると、次のように出力されます。
この文字列には整数が含まれています この文字列には整数が含まれています この文字列には整数が含まれています この文字列には整数が含まれています この文字列には整数が含まれていません この文字列には整数が含まれていません
コードの解説
上記のプログラムでは、文字列の判定処理をmain()関数内で行っています。組み込み関数isdigit()を使い、文字列の各文字が数字(0〜9)かどうかを先頭から順番にチェックします。
- 文字が数字の場合 → 「この文字列には整数が含まれています」と出力
- 文字が数字以外(英字や記号など)の場合 → 「この文字列には整数が含まれていません」と出力
サンプルの「3257fg」の場合、最初の4文字「3257」は数字なので整数ありと判定され、残りの「f」「g」は英字のため整数なしと判定されます。
判定を行っているループ部分のコードは以下のとおりです。
for (int i = 0; i < strlen(str); i++) {
if(isdigit(str[i]))
cout<<"この文字列には整数が含まれています\n";
else
cout<<"この文字列には整数が含まれていません\n";
}補足:文字列全体が整数として有効かどうかを判定するには
上記のコードは各文字を個別に判定するものです。文字列全体が整数として有効か(すべての文字が数字か)をまとめて判定したい場合は、フラグ変数を用意し、数字以外の文字が1つでも見つかった時点で無効と判断する方法が便利です。
bool isNumeric = true;
for (int i = 0; str[i] != '\0'; i++) {
if (!isdigit((unsigned char)str[i])) {
isNumeric = false;
break;
}
}
if (isNumeric)
cout << "この文字列は整数です\n";
else
cout << "この文字列は整数ではありません\n";なお、より厳密な判定が必要なケースでは、C標準ライブラリのstrtol()関数を使い、実際に数値へ変換できるかどうかを確認する方法もおすすめです。
-
C++でint型をstring型に変換する方法を解説
整数(int)を文字列(string)に変換したい場合、いくつかの方法があります。まずはC言語由来のitoa関数を使う方法から見ていきましょう。 itoa関数を使う方法 itoaは「integer to ASCII」の略で、整数値を文字列に変換するC言語の関数です。以下のように使用します。 例 #include<iostream> int main() { int a = 10; char *intStr = itoa(a); string str = string(intStr); cout << str; } 出力 このコードを実行す
-
C++で変数を初期化する方法をわかりやすく解説
C++における変数の初期化とはC++では、変数を使用する前に必ず初期化しておくことが重要です。未初期化の変数には不定値(ゴミ値)が入っており、そのまま使うと予期しない動作やバグの原因になります。変数の初期化には、主に「代入演算子を使う方法」と「コンストラクタを使う方法」の2つがあります。代入演算子による初期化最も基本的な方法は、代入演算子(=)を使って初期値を設定することです。int i = 0;コンストラクタによる初期化クラスや構造体のインスタンスは、コンストラクタに引数を渡して初期化できます。MyClass instance(1, Hello);自動的に初期化されるケース明示的に初期化しな