入力文字を逆転して表示する
K&R本 演習1-19
文字列sを逆に並べる関数reverse(s)を書け。さらに、この関数を使って、入力を一時に一行ずつ逆転するプログラムを書け。
#include <stdio.h> void reverse (char *s) { char c; char *p = s; int i = 0; int j; while(*++s&&*s!='\n') { ++i; } for(j=0;i>j;--i,++j) { c = p[j]; p[j] = p[i]; p[i] = c; } } int main(void) { char line[1000]; while( fgets(line,sizeof(line),stdin) != NULL ) { reverse(line); printf("%s",line); } return 0; }
$ cat main.c | main >h.oidts< edulcni# { )s* rahc( esrever diov ;c rahc ;s = p* rahc ;0 = i tni ;j tni } ;i++ { )'n\'=!s*&&s++*(elihw { )j++,i--;j>i;0=j(rof ;]j[p = c ;]i[p = ]j[p ;c = ]i[p } } { )diov(niam tni ;]0001[enil rahc { ) LLUN =! )nidts,)enil(foezis,enil(stegf (elihw ;)pf,)enil(foezis,enil(stegf// } ;kaerb { ) )nidts(foef ( fi// ;)enil(esrever ;)enil,"s%"(ftnirp } ;0 nruter }
改行コードも反転すると表示が更にわかりにくくなったので改行コードまでの文字列の反転をしました。
また一行の長さが1000文字以上の場合は無視されます。