C言語のisupper()関数を使って文字列内の大文字数をカウントする方法
問題概要
C言語プログラミングでは、入力された文字列の中に大文字アルファベットが何文字含まれているのかを調べたい場面があります。本記事では、標準ライブラリのisupper()関数を使う方法と、使わずに実現する方法の2つのアプローチを、サンプルコード付きで解説します。
解決策:大文字をカウントするロジック
文中の大文字の数を数えるために使用したロジックは以下の通りです。
for(a=string[0];a!='\0';i++){
a=string[i];
if (isupper(a)){
counter=counter+1;
//counter++;
}
}
文字列の先頭から1文字ずつ順番に取り出し、終端を示すヌル文字('\0')に到達するまで処理を繰り返します。各文字をisupper()関数で判定し、大文字であればカウンターを1つずつ増やしていきます。
isupper()関数とは
isupper()は、ヘッダー<ctype.h>で定義されている標準ライブラリ関数です。引数に渡した文字が大文字(A〜Z)の場合は0以外の値(真)を、それ以外の場合は0(偽)を返します。
例1:isupper()関数を使用するプログラム
#include<stdio.h>
#include<ctype.h>
void main(){
//個数の判定用変数と文字列の宣言//
int i=0;
char a;
char string[50];
int counter=0;
//ユーザー入力の読み込み//
printf("Enter the string :");
gets(string);
//forループとisupper()で大文字をカウント//
for(a=string[0];a!='\0';i++){
a=string[i];
if (isupper(a)){
counter=counter+1;
//counter++;
}
}
//大文字の個数を出力//
printf("Capital letters in string : %d\n",counter);
}
実行結果
Enter the string :TutoRialsPoint CPrograMMing Capital letters in string : 7
入力文字列「TutoRialsPoint CPrograMMing」に含まれる T・R・P・C・P・M・M の7つの大文字が正しくカウントされています。
例2:isupper()関数を使用しないプログラム
次に、isupper()関数を使わずに大文字をカウントする方法を紹介します。ASCIIコードの性質を利用し、文字が「'A'以上 かつ 'Z'以下」であるかを直接比較することで大文字かどうかを判定します。
#include<stdio.h>
int main(){
int upper = 0;
char string[50];
int i;
printf("enter The String : \n");
gets(string);
i = 0;
while(string[i]!= ' '){
if (string[i] >= 'A' && string[i] <= 'Z')
upper++;
i++;
}
printf("\nUppercase Letters : %d", upper);
return (0);
}
実行結果
enter The String : TutOrial Uppercase Letters : 2
入力「TutOrial」に含まれる T と O の2つの大文字が出力されています。
補足:gets()関数の注意点
上記のサンプルコードでは文字列入力にgets()を使用していますが、gets()はバッファオーバーフローを引き起こす危険があるため、C11規格で廃止されました。実際の開発では、fgets()など安全な入力関数を使用することが強く推奨されます。
-
【C言語】再帰関数を使って2つの整数の最大公約数(GCD)を求める方法
問題 C言語において再帰関数を使用し、与えられた2つの整数の最大公約数(GCD:Greatest Common Divisor)を求めます。 解決策 再帰関数を用いて2つの整数の最大公約数を求めるには、「ユークリッドの互除法」が利用できます。これは「2つの数のGCDは、大きい方の数を小さい方の数で割った余りと、小さい方の数とのGCDに等しい」という性質を応用した手法です。この計算を余りが0になるまで再帰的に繰り返すことで、GCDを効率よく求めることができます。 アルゴリズム 再帰関数を使って2つの整数のGCDを求めるためのアルゴリズムは、以下の手順に従います。 ステップ1 − 再帰関数を
-
【C言語】strncmpライブラリ関数を使って2つの文字列を比較するプログラムの作り方
strncmpは、C言語のヘッダーファイル「string.h」に定義されている標準ライブラリ関数の一つです。この関数を使用すると、2つの文字列を比較し、どちらの文字列が大きい(辞書順で後ろにある)のかを判定することができます。 strcmp関数(文字列比較) strcmp関数は、2つの文字列を比較するための関数です。戻り値として、両方の文字列の中で最初に一致しなかった文字同士のASCIIコードの差を返します。 構文 int strcmp(string1, string2); 差が0の場合:string1 = string2(2つの文字列は等しい) 差が正の値の場合:string1 &