C/C++で入力された文字列が整数(数字のみ)かどうかを判定する方法
この記事では、ユーザーから入力された文字列が「整数を表す文字列」なのか、それとも通常の文字列なのかを判定する方法を解説します。ここでいう整数文字列とは、すべての文字が 0 ~ 9 の範囲に含まれる文字列のことです。
判定の考え方
アプローチは非常にシンプルです。文字列の先頭から順に1文字ずつ調べ、その文字が数字であるかどうかを isdigit() 関数でチェックしていきます。すべての文字が数字であれば整数文字列とみなし true を返し、途中に数字以外の文字が1つでも見つかった時点で false を返して処理を終了します。
サンプルコード
#include <iostream>
using namespace std;
// 文字列が数字のみで構成されているかを判定する関数
bool isNumeric(string str) {
for (int i = 0; i < str.length(); i++)
if (isdigit(str[i]) == false)
return false; // 数字以外の文字が見つかった時点で false を返す
return true;
}
int main() {
string str;
cout << "Enter a string: ";
cin >> str;
if (isNumeric(str))
cout << "This is a Number" << endl;
else
cout << "This is not a number";
}実行例
ケース1:数字のみの入力の場合
Enter a string: 5687 This is a Number
入力された「5687」はすべて数字で構成されているため、整数として認識されます。
ケース2:英字などが混ざった入力の場合
Enter a string: 584asS This is not a number
「584asS」には英字が含まれているため、数字以外の文字が検出された時点で false が返され、「数値ではない」と判定されます。
補足:C++11以降ならさらに簡潔に書ける
C++11 以降では、std::all_of とラムダ式を組み合わせることで、ループ処理を明示的に書かずに同じ判定を実現できます。また、空文字列が誤って true と判定されないよう、事前に空かどうかをチェックしておくとより安全です。
#include <iostream>
#include <string>
#include <cctype>
#include <algorithm>
bool isNumeric(const std::string& str) {
return !str.empty() &&
std::all_of(str.begin(), str.end(),
[](unsigned char c) { return std::isdigit(c); });
}このように、基本的な考え方はどちらの書き方でも同じです。「すべての文字が数字であるか」を順番に検証し、条件を満たさない文字があれば即座に判定を打ち切るのがポイントです。
-
C#で文字列が回文(パリンドローム)かどうかを判定する方法
回文(パリンドローム)とは、前から読んでも後ろから読んでも同じになる文字列のことです。例えば「Level」や「madam」などが代表的な例です。この記事では、C#を使って文字列が回文かどうかを判定する方法を解説します。回文判定の基本的な流れまず、判定対象となる文字列を用意します。str = Level;次に、ToCharArray() メソッドを使って文字列を文字配列に変換します。これにより、各文字に個別にアクセスできるようになります。char[] ch = str.ToCharArray();続いて、Array.Reverse() メソッドで配列の要素順を反転させます。Array.Rever
-
Python 3で入力された文字列が整数かどうか判定する方法
isdigit()メソッドを使った整数判定Pythonの文字列(str)クラスにはisdigit()という便利なメソッドが用意されています。このメソッドは、文字列に含まれるすべての文字が数字であり、かつ文字列が空でない場合にTrueを返し、それ以外の場合はFalseを返します。小数点を含む数値(float)を入力した場合も、ピリオドは数字ではないためFalseになります。Python 3ではinput()関数でユーザーからの入力を受け取るので、次のように記述します。>>> x = input() 12345 >>> x.isdigit() Trueこのように