文字列変換関数を使わずに大文字を小文字へ変換するC言語プログラム
C言語には、大文字を小文字に変換するための標準ライブラリ関数 strlwr が用意されています。しかし、実際の学習や試験では「変換関数を使わずに実装せよ」という課題が出されることも少なくありません。
まずは strlwr を使ったプログラムを確認し、その仕組みを理解したうえで、次に自前のコードだけで同じ処理を実現する方法を見ていきましょう。
例1:strlwr 関数を使用する場合
#include <stdio.h>
#include <string.h>
int main(){
char string[50];
printf("enter a string to convert to lower case\n");
gets(string); // 文字列を読み込む
// strlwr がすべての大文字を小文字に変換する
printf("The string in lower case: %s\n", strlwr(string));
return 0;
}
出力
enter a string to convert to lower case CProgramming LangUage The string in lower case: cprogramming language
strlwr は引数に渡された文字列内のすべての大文字を小文字に変換し、その結果へのポインタを返します。非常に簡単ですが、内部で何が行われているかはブラックボックスです。
例2:定義済み関数を使わずに大文字を小文字へ変換する
ここで重要になるのがASCIIコードの規則です。ASCII表では、大文字の「A」〜「Z」には 65〜90、小文字の「a」〜「z」には 97〜122 の番号が割り当てられています。つまり、同じアルファベットの大文字と小文字のコード差は常に 32 です。
この性質を利用すると、「文字コードが 65 以上 90 以下(=大文字)であれば 32 を加算する」という処理で、すべての大文字を小文字へ変換できます。
#include<stdio.h>
void main(){
// forループ用の変数(各文字の位置を読むため)と文字列を宣言//
int i;
char string[40];
// 文字列を読み込む//
printf("Enter the string : ");
gets(string);
// 各文字を順番に調べるforループ//
for(i=0;string[i]!='\0';i++){
if(string[i]>=65&&string[i]<=90){
string[i]=string[i]+32;
}
}
printf("The converted lower case string is : ");
puts(string);
}
プログラムの流れ
getsでキーボードから文字列を入力します。forループで文字列を先頭から1文字ずつ走査します。終端のヌル文字'\0'に到達した時点でループが終了します。if文で、その文字のASCIIコードが 65〜90 の範囲(大文字 A〜Z)かどうかを判定します。- 大文字であれば
+32して対応する小文字に置き換えます。すでに小文字や数字・記号の場合はそのまま維持されます。 - 最後に
putsで変換後の文字列を出力します。
出力
Enter the string : TUTORIALSPOINT The converted lower case string is : tutorialspoint
このように、文字コードの数値的な性質を理解していれば、ライブラリ関数に頼らずとも大文字・小文字の変換を簡単に実装できます。なお、バッファオーバーフロー防止のため、実務では gets の代わりに fgets の使用が推奨される点にも留意しておきましょう。
-
【C言語】strncmpライブラリ関数を使って2つの文字列を比較するプログラムの作り方
strncmpは、C言語のヘッダーファイル「string.h」に定義されている標準ライブラリ関数の一つです。この関数を使用すると、2つの文字列を比較し、どちらの文字列が大きい(辞書順で後ろにある)のかを判定することができます。 strcmp関数(文字列比較) strcmp関数は、2つの文字列を比較するための関数です。戻り値として、両方の文字列の中で最初に一致しなかった文字同士のASCIIコードの差を返します。 構文 int strcmp(string1, string2); 差が0の場合:string1 = string2(2つの文字列は等しい) 差が正の値の場合:string1 &
-
組み込み関数を使わずにPythonで大文字・小文字の文字数をカウントする方法
はじめに 本記事では、以下の問題に対する解決策について詳しく解説します。 問題文 文字列が与えられたとき、組み込みの文字判定関数を使用せずに、その文字列に含まれる大文字と小文字の数をそれぞれカウントする必要があります。 通常、この問題はPythonに標準で用意されている islower() や isupper() を使えば簡単に解決できます。しかし今回は「これらの文字判定関数を使わない」という制約があるため、文字のASCIIコード値を活用したアプローチを採用します。 ord() 関数を使うことで、文字列内の各文字のASCIIコード値を取得できます。取得した値が小文字の範囲(97〜122)