#include <stdio.h>
#include <stdlib.h>
// 文字列の長さを返す関数
int myStrlen(char s[]) {
int i;
for(i = 0; s[i] != '\0'; i++); // '\0' に達するまで文字を数える
return i; // 文字数を返す
}
// 回文を作成する関数
char *setPalindrome(char s[]) {
int length = myStrlen(s); // 入力文字列の長さを取得
int i, j;
// 回文を作るために必要なメモリを確保
char *tmp
= (char *)malloc(sizeof(char) * (2 * length
+ 1)); // 2倍の長さ + 終端文字の '\0' のため 1 を加える
// 元の文字列を tmp にコピー
for (i = 0; i < length; i++) {
tmp[i] = s[i];
}
// 逆順の部分を追加
for (i = 0; i < length - 1; i++) { // 最後の1文字は追加しない(回文になるため)
tmp[length + i] = s[length - 2 - i]; // 元の文字列の末尾から逆順に追加
}
tmp[2 * length - 1] = '\0'; // 終端文字を追加
return tmp; // 回文文字列を返す
}
// メイン関数
int main() {
char nyuryoku[1024]; // 入力用文字列
char *kaibun; // 回文を受け取る
// 入力を受け取る
// 回文を作成
kaibun = setPalindrome(nyuryoku);
// 結果を表示
printf("%s\n -> %s\n", nyuryoku
, kaibun
);
// 動的に確保したメモリを解放
return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCi8vIOaWh+Wtl+WIl+OBrumVt+OBleOCkui/lOOBmemWouaVsAppbnQgbXlTdHJsZW4oY2hhciBzW10pIHsKICAgIGludCBpOwogICAgZm9yKGkgPSAwOyBzW2ldICE9ICdcMCc7IGkrKyk7ICAvLyAnXDAnIOOBq+mBlOOBmeOCi+OBvuOBp+aWh+Wtl+OCkuaVsOOBiOOCiwogICAgcmV0dXJuIGk7ICAvLyDmloflrZfmlbDjgpLov5TjgZkKfQoKLy8g5Zue5paH44KS5L2c5oiQ44GZ44KL6Zai5pWwCmNoYXIgKnNldFBhbGluZHJvbWUoY2hhciBzW10pIHsKICAgIGludCBsZW5ndGggPSBteVN0cmxlbihzKTsgIC8vIOWFpeWKm+aWh+Wtl+WIl+OBrumVt+OBleOCkuWPluW+lwogICAgaW50IGksIGo7CgogICAgLy8g5Zue5paH44KS5L2c44KL44Gf44KB44Gr5b+F6KaB44Gq44Oh44Oi44Oq44KS56K65L+dCiAgICBjaGFyICp0bXAgPSAoY2hhciAqKW1hbGxvYyhzaXplb2YoY2hhcikgKiAoMiAqIGxlbmd0aCArIDEpKTsgIC8vIDLlgI3jga7plbfjgZUgKyDntYLnq6/mloflrZfjga4gJ1wwJyDjga7jgZ/jgoEgMSDjgpLliqDjgYjjgosKCiAgICAvLyDlhYPjga7mloflrZfliJfjgpIgdG1wIOOBq+OCs+ODlOODvAogICAgZm9yIChpID0gMDsgaSA8IGxlbmd0aDsgaSsrKSB7CiAgICAgICAgdG1wW2ldID0gc1tpXTsKICAgIH0KCiAgICAvLyDpgIbpoIbjga7pg6jliIbjgpLov73liqAKICAgIGZvciAoaSA9IDA7IGkgPCBsZW5ndGggLSAxOyBpKyspIHsgIC8vIOacgOW+jOOBrjHmloflrZfjga/ov73liqDjgZfjgarjgYTvvIjlm57mlofjgavjgarjgovjgZ/jgoHvvIkKICAgICAgICB0bXBbbGVuZ3RoICsgaV0gPSBzW2xlbmd0aCAtIDIgLSBpXTsgLy8g5YWD44Gu5paH5a2X5YiX44Gu5pyr5bC+44GL44KJ6YCG6aCG44Gr6L+95YqgCiAgICB9CgogICAgdG1wWzIgKiBsZW5ndGggLSAxXSA9ICdcMCc7ICAvLyDntYLnq6/mloflrZfjgpLov73liqAKCiAgICByZXR1cm4gdG1wOyAgLy8g5Zue5paH5paH5a2X5YiX44KS6L+U44GZCn0KCi8vIOODoeOCpOODs+mWouaVsAppbnQgbWFpbigpIHsKICAgIGNoYXIgbnl1cnlva3VbMTAyNF07ICAvLyDlhaXlipvnlKjmloflrZfliJcKICAgIGNoYXIgKmthaWJ1bjsgICAgICAgICAvLyDlm57mlofjgpLlj5fjgZHlj5bjgosKCiAgICAvLyDlhaXlipvjgpLlj5fjgZHlj5bjgosKICAgIHNjYW5mKCIlcyIsIG55dXJ5b2t1KTsKCiAgICAvLyDlm57mlofjgpLkvZzmiJAKICAgIGthaWJ1biA9IHNldFBhbGluZHJvbWUobnl1cnlva3UpOwoKICAgIC8vIOe1kOaenOOCkuihqOekugogICAgcHJpbnRmKCIlc1xuICAtPiAlc1xuIiwgbnl1cnlva3UsIGthaWJ1bik7CgogICAgLy8g5YuV55qE44Gr56K65L+d44GX44Gf44Oh44Oi44Oq44KS6Kej5pS+CiAgICBmcmVlKGthaWJ1bik7CgogICAgcmV0dXJuIDA7Cn0K