演習 4-13

無職の間にK&Rを再読。演習問題の解答をさらす。解く順番は適当。

演習 4-13
文字列 s をその場所で逆順にする関数 reverse(s)再帰版を書け。


Exercise 4-13
Write a recursive version of the function reverse(s), which reverses the string s in place.

#include <stdio.h>

void reverse(char s[])
{
  int i;
  for (i = 0; s[i] != '\0'; i++)
    ;
  _reverse(s, 0, i - 1);
}

int _reverse(char s[], int left, int right)
{
  if (left >= right) return;
  
  int tmp = s[left];
  s[left] = s[right];
  s[right] = tmp;
  _reverse(s, left + 1, right - 1);
}


int main(void)
{
  char s[] = "HELLO!";

  reverse(s);

  putchar('\n');

  printf("[%s]\n", s);

  return 0;
}