fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. // 文字列の長さを返す関数
  5. int myStrlen(char s[]) {
  6. int i;
  7. for (i = 0; s[i] != '\0'; i++);
  8. return i;
  9. }
  10.  
  11. // 回文を作成する関数
  12. char *setPalindrome(char s[]) {
  13. int len = myStrlen(s); // 入力文字列の長さを取得
  14. int totalLen = 2 * len; // 回文用のメモリサイズを計算
  15. char *tmp = (char *)malloc((totalLen + 1) * sizeof(char)); // メモリ確保
  16.  
  17. if (tmp == NULL) {
  18. printf("Memory allocation failed\n");
  19. exit(1); // メモリ確保に失敗した場合にプログラム終了
  20. }
  21.  
  22. // 入力文字列をコピー
  23. for (int i = 0; i < len; i++) {
  24. tmp[i] = s[i];
  25. }
  26.  
  27. // 入力文字列を逆順に追加
  28. for (int i = 0; i < len; i++) {
  29. tmp[len + i] = s[len - 1 - i];
  30. }
  31.  
  32. tmp[totalLen] = '\0'; // 終端文字を追加
  33. return tmp; // 回文を返す
  34. }
  35.  
  36. int main() {
  37. char nyuryoku[1024]; // 入力
  38. char *kaibun; // 回文を受け取る
  39. scanf("%s", nyuryoku);
  40. kaibun = setPalindrome(nyuryoku);
  41. printf("%s\n -> %s\n", nyuryoku, kaibun);
  42. free(kaibun); // 動的確保したメモリを解放
  43. return 0;
  44. }
  45.  
Success #stdin #stdout 0s 5276KB
stdin
abab
stdout
abab
  -> ababbaba