- ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:上からよんでも下から読んでも同じか?否か?)
上からよんでも下から読んでも同じか?否か?
このQ&Aのポイント
- プログラムを使って文字列を上から読んでも下から読んでも同じかどうかを判定する方法を教えてください。
- ポインタを使用して入力された文字列を反転させ、元の文字列と比較することで回文かどうかを判定することができます。
- 具体的なプログラム例として、文字列と文字列の長さを引数とする関数check_anagramを作成し、回文の場合は1、そうでない場合は0を返すようにします。
- みんなの回答 (1)
- 専門家の回答
質問者が選んだベストアンサー
以下の例題を参考にして、文字列の中身や文字列長をもとに どう一般化すればよいか、考えてみてください。 例1)check_anagram関数に、"abccba"と文字列長6が渡ってきたとします。 このとき、 ・0番目の文字'a'と5番目の文字'a'を比べる。等しい。 ・1番目の文字'b'と4番目の文字'b'を比べる。等しい。 ・2番目の文字'c'と3番目の文字'c'を比べる。等しい。 ・すべての文字を比べ終わった。すべて等しかったので、回文である。 例2)check_anagram関数に、"abcdcba"と文字列長7が渡ってきたとします。 このとき、 ・0番目の文字'a'と6番目の文字'a'を比べる。等しい。 ・1番目の文字'b'と5番目の文字'b'を比べる。等しい。 ・2番目の文字'c'と4番目の文字'c'を比べる。等しい。 ・3番目の文字は比べても比べなくても同じ。 ・すべての文字を比べ終わった。すべて等しかったので、回文である。 例3)check_anagram関数に、"abcdxba"と文字列長7が渡ってきたとします。 このとき、 ・0番目の文字'a'と6番目の文字'a'を比べる。等しい。 ・1番目の文字'b'と5番目の文字'b'を比べる。等しい。 ・2番目の文字'c'と4番目の文字'x'を比べる。等しくない。 ・比べる過程の途中で、少なくとも1箇所等しくないところがあったので、回文ではない
お礼
ありがとうございました。問題解決しました。 例題を参考にさせてもらいました。
補足
反転するプログラムは #include <stdio.h> int main(void){ int i; char origin[64]; char palindrome[64]; int len; printf("文字列を入力:"); scanf("%s" , origin); i = 0; while(1){ if(origin[i] == '\0'){ len = i ; break ; } i++; } printf("文字列の逆順は"); for( i = 0; i <= len-1; i++ ){ palindrome[i] = origin[len-1-i]; printf("%c",palindrome[i]); } getchar(); getchar(); return (0); } ですね。 回文が正しいかどうかですね。そこのプログラムはこれを参考ししてやってみます。