/*
* K&R2 1-21
* Author: Donmmi
* Email:teddy_liu@live.com
*/
#include <stdio.h>
/* 4 spaces to a tab */
#define NTAB 4
int main(void) {
/*
* len is the nums of input charactor
* if (c == ' ' && len % NTAB == 0) translate the space(s) to tab
*/
int c, len, nspace, flag;
len = nspace = flag = 0;
while ((c = getchar()) != EOF) {
++len;
if (c == ' ') {
if (len % NTAB == 0) { /* space(s) translate to tab */
if (flag == 0)
putchar('\t');
flag = 1;
nspace = 0;
} else
++nspace;
} else {
/*
* If the next charactor is not space and can't translate to tab
* then output saved space and the charactor
*/
while (nspace) {
putchar(' ');
--nspace;
}
putchar(c);
if (c == '\n')
len = 0;
flag = 0;
}
}
return 0;
}
记录字符个数len,和连续空格个数nspace
如果下个字符不为空格则输出之前保存的空格和非空格字符
如果下个字符为空格,根据len%NTAB判断是否可以将空格转换为tab