#include <stdio.h>
#include <stdlib.h>
int myStrlen(char s[]){
int i;
for(i = 0; s[i] != '\0'; i++);
return i;
}
char *setPalindrome(char s[]){
int len = myStrlen(s);
// 元の文字列 + 逆順文字列 + 終端'\0' の長さを確保
char *tmp
= malloc((len
* 2 + 1) * sizeof(char)); if (tmp == NULL) {
}
// 前半:入力文字列をコピー
for (int i = 0; i < len; i++) {
tmp[i] = s[i];
}
// 後半:入力文字列を逆順でコピー
for (int i = 0; i < len; i++) {
tmp[len + i] = s[len - 1 - i];
}
// ヌル文字をセット
tmp[len * 2] = '\0';
return tmp;
}
int main(){
char nyuryoku[1024];
char *kaibun;
kaibun = setPalindrome(nyuryoku);
printf("%s\n -> %s\n", nyuryoku
, kaibun
); return 0;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KCmludCBteVN0cmxlbihjaGFyIHNbXSl7CiAgICBpbnQgaTsKICAgIGZvcihpID0gMDsgc1tpXSAhPSAnXDAnOyBpKyspOwogICAgcmV0dXJuIGk7Cn0KCmNoYXIgKnNldFBhbGluZHJvbWUoY2hhciBzW10pewogICAgaW50IGxlbiA9IG15U3RybGVuKHMpOwogICAgLy8g5YWD44Gu5paH5a2X5YiXICsg6YCG6aCG5paH5a2X5YiXICsg57WC56uvJ1wwJyDjga7plbfjgZXjgpLnorrkv50KICAgIGNoYXIgKnRtcCA9IG1hbGxvYygobGVuICogMiArIDEpICogc2l6ZW9mKGNoYXIpKTsKICAgIGlmICh0bXAgPT0gTlVMTCkgewogICAgICAgIHBlcnJvcigibWFsbG9jIik7CiAgICAgICAgZXhpdChFWElUX0ZBSUxVUkUpOwogICAgfQogICAgLy8g5YmN5Y2K77ya5YWl5Yqb5paH5a2X5YiX44KS44Kz44OU44O8CiAgICBmb3IgKGludCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CiAgICAgICAgdG1wW2ldID0gc1tpXTsKICAgIH0KICAgIC8vIOW+jOWNiu+8muWFpeWKm+aWh+Wtl+WIl+OCkumAhumghuOBp+OCs+ODlOODvAogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBsZW47IGkrKykgewogICAgICAgIHRtcFtsZW4gKyBpXSA9IHNbbGVuIC0gMSAtIGldOwogICAgfQogICAgLy8g44OM44Or5paH5a2X44KS44K744OD44OICiAgICB0bXBbbGVuICogMl0gPSAnXDAnOwogICAgcmV0dXJuIHRtcDsKfQoKaW50IG1haW4oKXsKICAgIGNoYXIgbnl1cnlva3VbMTAyNF07CiAgICBjaGFyICprYWlidW47CiAgICBzY2FuZigiJXMiLCBueXVyeW9rdSk7CiAgICBrYWlidW4gPSBzZXRQYWxpbmRyb21lKG55dXJ5b2t1KTsKICAgIHByaW50ZigiJXNcbiAgLT4gJXNcbiIsIG55dXJ5b2t1LCBrYWlidW4pOwogICAgZnJlZShrYWlidW4pOwogICAgcmV0dXJuIDA7Cn0K