C言語で回文かどうかを判定する方法を教えて下さい。
2つのポインタを文字列の先頭と末尾から中央に向かって動かして、ポインタが指す文字が等しいかどうかを比較し、等しければポインタを移動し続けます。両方のポインタが出会ったり、異なる場合があります。
具体的な手順は以下のとおりです。
- 文字の最初を指すポインタと、最後を指すポインタの2つを定義します。
- 2つのポインタが指す文字が等しいかを循環的に調べて、等しければポインタを移動させ、ポインタが一致するか異なる状態になるまで続けます。
- 2つのポインタが合致すれば回文、さもなくばそうでない
例えば、以下にコード例を示します。
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
bool isPalindrome(char *str) {
int start = 0;
int end = strlen(str) - 1;
while (start < end) {
if (str[start] != str[end]) {
return false;
}
start++;
end--;
}
return true;
}
int main() {
char str[] = "abcdeedcba";
if (isPalindrome(str)) {
printf("The string is a palindrome.\n");
} else {
printf("The string is not a palindrome.\n");
}
return 0;
}
上述のコードでは、isPalindrome関数は文字列が回文であるかどうかを判断するために利用されています。はじめに、2つのポインタ、startとendを定義し、それぞれ文字列の先頭と最後を指します。次に、2つのポインタが指す文字が等しいかどうかを判断するループを使用し、等しい場合は2つのポインタを移動し続け、2つのポインタが出会うか、等しくない状況になるまで続けます。2つのポインタが出会った場合、文字列は回文であり、trueが返されます。それ以外の場合は文字列は回文ではなく、falseが返されます。main関数では、文字列のサンプルが与えられ、isPalindrome関数を使用して文字列が回文かどうかが判断され、その結果が出力されます。