【C言語】回文を判定するプログラムを書く
回文とは
回文(かいぶん)とは、前から読んでも後ろから読んでも同じ文字列になるものを指します。例えば、「すもももももももものうち」や「madam」、「racecar」などが回文の例です。
回文判定の基本的なアルゴリズム
回文判定を行うには、文字列の先頭と末尾から順番に文字を比較していき、一致していれば回文であると判断します。比較を途中で発見した時点で一致しなければ回文でないと判定できます。
このアルゴリズムは、次の手順で実行されます:
- 文字列の長さを調べる。
- 文字列の最初と最後の文字を比較する。
- 一致していれば、次に内側の文字を比較する。
- 途中で一致しない文字が見つかれば、回文ではない。
- すべての文字が一致すれば回文。
C言語による回文判定プログラム例
以下は、C言語を使った回文判定のコード例です。
#include#include #include // 回文判定の関数 int is_palindrome(char str[]) { int start = 0; int end = strlen(str) - 1; // 文字列の前後から比較 while (start < end) { // 小文字に変換して比較(case insensitive) if (tolower(str[start]) != tolower(str[end])) { return 0; // 回文ではない } start++; end--; } return 1; // 回文である } int main() { char str[100]; // ユーザー入力を受け取る printf("回文判定する文字列を入力してください: "); fgets(str, sizeof(str), stdin); str[strcspn(str, "\n")] = 0; // 改行文字を削除 // 回文かどうかを判定 if (is_palindrome(str)) { printf("'%s' は回文です。\n", str); } else { printf("'%s' は回文ではありません。\n", str); } return 0; }
回文判定の注意点
回文判定を行う際に気を付けるべき点はいくつかあります:
- 大文字と小文字を区別しない場合、文字列を小文字に統一して比較するのが一般的です。
- 空白や句読点を無視する場合、これらを削除してから判定を行う必要があります。
- 入力文字列に改行文字や空白が含まれている場合、それらを処理しておくとよいでしょう。
コード例と実行例
以下は、上記のプログラムを実行した結果の例です:
回文判定する文字列を入力してください: madam 'madam' は回文です。 回文判定する文字列を入力してください: hello 'hello' は回文ではありません。
このように、プログラムは入力された文字列が回文かどうかを判定し、結果を表示します。回文判定を行う基本的な考え方は非常にシンプルですが、実際にプログラムで実行する際には、文字列の前後から比較を行い、効率よく処理することが重要です。