fork download
  1. #include <stdio.h>
  2. #include <stdlib.h> // mallocとfreeを使うから、この道具箱が必要!
  3.  
  4. int main(void) {
  5. int i, size;
  6. char nyuryoku[1024]; // 入力された文字を入れるノート
  7. char *kaibun; // 新しく作る回文を入れるための魔法の箱
  8.  
  9. // 【1. 単語を読み込む】
  10. if (scanf("%s", nyuryoku) != 1) return -1;
  11.  
  12. // 【2. 回文作成の心臓部】(関数をここに合体!)
  13.  
  14. // ① 入力された文字の長さ(size)を数える
  15. for (size = 0; nyuryoku[size] != '\0'; size++);
  16.  
  17. // ② 2倍の長さの新しいノートをパソコンの中に確保する
  18. // (元のサイズ × 2) + 終わりの合図('\0')の1マス分
  19. kaibun = (char *)malloc(sizeof(char) * (2 * size + 1));
  20. if (kaibun == NULL) {
  21. printf("ERROR\n");
  22. return -1;
  23. }
  24.  
  25. // ③ 新しいノートの前半半分に、元の文字をそのままコピー
  26. for (i = 0; i < size; i++) {
  27. kaibun[i] = nyuryoku[i];
  28. }
  29.  
  30. // ④ 新しいノートの後半半分に、後ろからひっくり返してコピー
  31. for (i = 0; i < size; i++) {
  32. kaibun[i + size] = nyuryoku[size - i - 1];
  33. }
  34.  
  35. // 🛡️ ⑤ 新しいノートの一番お尻に、終わりの合図「\0」を書き込む!
  36. kaibun[2 * size] = '\0';
  37.  
  38. // 【3. 結果発表】
  39. printf("%s\n -> %s\n", nyuryoku, kaibun);
  40.  
  41. // 【4. お片付け】
  42. free(kaibun); // mallocで作ったノートをゴミ箱に捨てる
  43.  
  44. return 0;
  45. }
Success #stdin #stdout 0s 5324KB
stdin
abcd
stdout
abcd
  -> abcddcba