【C言語】入力された文字列から数字の個数をカウントする

入力された文字・文字列から何回数字が登場したかカウントするプログラムの書き方を解説します。

サンプルコード

#define _CRT_SECURE_NO_WARNINGS
#include<stdio.h>
int main() {
	char buffer[BUFSIZ];
	scanf("%s", buffer);
	int count = 0;
	for (int i = 0; i < sizeof(buffer); i++) {
		if (buffer[i] == NULL)break;

		if (buffer[i] >= '0' && buffer[i] <= '9') {
			count++;
		}

	}
	printf("数字の登場回数:%d", count);

	return 0;
}

解説

重要なポイントは7行目~14行目までのforループです。

8行目のNULL判定は大切です。scanf関数で受け取った入力文字列などの文字列の終端は必ずNULLになっています。

そのため、文字列の文字を一つ一つチェックしていく際にNULLが登場したということは、そこが文字列の終端であるということを判定できます。

文字列の終端まで到達したということはそれ以上ループを回す必要がないため、break文でforループを抜ける処理をループの最初に行っています。

10行目のif文では、文字が数字かどうか判定しています。

ここで重要なポイントは数値としての0~9ではなく文字としての0~9で判定を行っているということです。

C言語は都合よく勝手に0~9の数字に変換されることがないので、必ず文字としての0~9で判定を行う必要があります。

また、C言語の文字は文字コードという数値で管理されており、文字の0~9までは全て連番になっています。

文字文字コード
048
149
250
351
452
553
654
755
856
957

つまり、buffer[i] >= '0' && buffer[i] <= '9'buffer[i] >= 48 && buffer[i] <= 57と同じ意味であり、たった2つの条件で0~9の数字かどうか判定することができるのです。

わざわざbuffer[i] == '0' || buffer[i] == '1' || buffer[i] == '2' ||...のように長々と書く必要はありません。

あとは、条件に一致したとき(数字だったとき)にカウントしていくだけです。

さいごに

今回の例では、文字列中に登場する数字をカウントするプログラムの紹介でしたが、カウント条件を変更すればアルファベットの出現回数・特定の記号の出現回数を判定することも可能です。

こちらの記事も読まれています

カテゴリー: