Exercise 1-20
Write a program detab that replaces tabs in the input with the proper number of blanks to space to the next tab stop. Assume a fixed set of tab stops, say every n columns. Should n be a variable or a symbolic parameter?
#include <stdio.h>
#define TAB_SIZE 8
long col_no; /* column number */
void put_char(int ch) {
putchar(ch);
if (ch == '/n') {
col_no = 0;
}
else
col_no ++;
}
int main() {
int c;
while ((c = getchar()) != EOF) {
if (c == '/t') {
int spaces = TAB_SIZE - (col_no % TAB_SIZE);
for (; spaces > 0; --spaces)
put_char(' ');
} else {
put_char(c);
}
}
return 0;
}
Exercise 1-21
Write a program entab that replaces strings of blanks with the minimum number of tabs and blanks to achieve the same spacing. Use the same stops as for detab . When either a tab or a single blank would suffice to reach a tab stop, which should be given preference?
#include <stdio.h>
#define TAB_SIZE 8
long col_no;
void put_char(int ch) {
putchar(ch);
if (ch == '/n') {
col_no = 0;
}
else
col_no++;
}
int main() {
int c;
int spaces = 0;
while ((c = getchar()) != EOF) {
if (c == ' ') {
col_no++;
spaces = col_no % TAB_SIZE;
if (spaces == 0) {
put_char('/t');
col_no--;
}
}
else {
for (; spaces > 0; --spaces)
put_char(' ');
put_char(c);
}
}
return 0;
}