Cで文字列を反転させる再帰関数
Cで文字列を反転させる関数を再帰を使って書け、という問題をふと思い出して書いてみた。久しぶりにCを書くと一発でコンパイルが通らなかったりする。で、プロトタイプ宣言なしだと、小粒の関数から順に並べないとダメだったりして、どうも気持ち悪い。抽象度の高い関数があって、その実装は実はこうだよ、ここではこれこれはこういう意味で使ってるよという風に「高->低」と定義していくほうが自然な気がする。
#include <stdio.h> #include <stdlib.h> #include <string.h> void swap_chars (char *s, char *e) { char tmp; if (s >= e) return; tmp = *e; *e = *s; *s = tmp; *s++; *e--; swap_chars(s, e); } void reverse (char *str) { int len = strlen(str); swap_chars(str, str + len - 1); return; } int main (int argc, char *argv[]) { if (argc <= 1) { printf("give me a string\n"); exit(1); } char *str = argv[1]; reverse(str); printf("%s\n", str); return 0; }