Blame


1 5dc21454 2023-07-14 jrmu /*
2 5dc21454 2023-07-14 jrmu * 1-21. Write a program entab that replaces strings of blanks by the minimum number of tabs and blanks to achieve the same spacing. Use the same tab stops as for detab. When either a tab or a single blank would suffice to reach a tab stop, which should be given preference?
3 5dc21454 2023-07-14 jrmu */
4 5dc21454 2023-07-14 jrmu
5 5dc21454 2023-07-14 jrmu #include <stdio.h>
6 5dc21454 2023-07-14 jrmu #define TABSTOP 8
7 5dc21454 2023-07-14 jrmu
8 5dc21454 2023-07-14 jrmu main()
9 5dc21454 2023-07-14 jrmu {
10 5dc21454 2023-07-14 jrmu int c, col, spaces;
11 5dc21454 2023-07-14 jrmu
12 5dc21454 2023-07-14 jrmu for (col = 1, spaces = 0; (c = getchar())!=EOF; ++col) {
13 5dc21454 2023-07-14 jrmu if (c == ' ') {
14 5dc21454 2023-07-14 jrmu if (col%TABSTOP == 0) {
15 5dc21454 2023-07-14 jrmu printf ("\t");
16 5dc21454 2023-07-14 jrmu spaces = 0;
17 5dc21454 2023-07-14 jrmu } else {
18 5dc21454 2023-07-14 jrmu ++spaces;
19 5dc21454 2023-07-14 jrmu }
20 5dc21454 2023-07-14 jrmu } else if (c == '\t') {
21 5dc21454 2023-07-14 jrmu do {
22 5dc21454 2023-07-14 jrmu printf(" ");
23 5dc21454 2023-07-14 jrmu ++col;
24 5dc21454 2023-07-14 jrmu } while (col%TABSTOP != 1);
25 5dc21454 2023-07-14 jrmu } else {
26 5dc21454 2023-07-14 jrmu for (int i = 0; i < spaces; ++i) {
27 5dc21454 2023-07-14 jrmu printf(" ");
28 5dc21454 2023-07-14 jrmu }
29 5dc21454 2023-07-14 jrmu spaces = 0;
30 5dc21454 2023-07-14 jrmu printf("%c", c);
31 5dc21454 2023-07-14 jrmu if (c == '\n') {
32 5dc21454 2023-07-14 jrmu col = 0;
33 5dc21454 2023-07-14 jrmu }
34 5dc21454 2023-07-14 jrmu }
35 5dc21454 2023-07-14 jrmu }
36 5dc21454 2023-07-14 jrmu }