タブをスペースに変換するdetab
K&R本 演習5-11
プログラムentabとdetabを書き直して、タブストップの並びを引数として受け取るようにせよ。引数がないときは通常のタブ設定を使用せよ。
なんか問題文がややこしいな・・・。
とりあえず今回はdetabだけやります。要はタブを4スペースに変換しろって話ですね。で引数でスペースの数を指定できるようにしろというお話。
#include <stdio.h> #include <stdlib.h> #include <ctype.h> int main (int argc,char *argv[]) { int c; int tab = 4; int s = 0; if ( argc > 1 && isdigit(**++argv) ) { tab = atoi(*argv); if ( tab <= 0 ) tab = 4; } while( (c = getchar()) != EOF ) { if ( c == '\t' ) { printf("%*c",tab - s,' '); s = -1; } else { printf("%c",c); } if ( c == '\n' ) { s = 0; } else { s = (s+1) % tab; } } return 0; }
$ cat test.txt aaa a aaa aa aaa aaa aaa aaaa aaa aa a a aaa $ detab aaa a aaa aa aaa aaa aaa aaaa aaa aa a a aaa $ detab 8 aaa a aaa aa aaa aaa aaa aaaa aaa aa a a aaa
できました。あんまり綺麗なコードではないですね。もっと綺麗にかけるようになりたいです。