Blame


1 5dc21454 2023-07-14 jrmu /*
2 5dc21454 2023-07-14 jrmu * 1-22. Write a program to "fold" long input lines into two or more shorter lines after the last non-blank character that occurs before the n-th column of input. Make sure your program does something intelligent with very long lines, and if there are no blanks or tabs before the specified column.
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 WIDTH 80
7 5dc21454 2023-07-14 jrmu #define TABSTOP 8
8 5dc21454 2023-07-14 jrmu
9 5dc21454 2023-07-14 jrmu int strln(char s[]);
10 5dc21454 2023-07-14 jrmu
11 5dc21454 2023-07-14 jrmu main()
12 5dc21454 2023-07-14 jrmu {
13 5dc21454 2023-07-14 jrmu int c, i, ci;
14 5dc21454 2023-07-14 jrmu char current[WIDTH];
15 5dc21454 2023-07-14 jrmu int len;
16 5dc21454 2023-07-14 jrmu
17 5dc21454 2023-07-14 jrmu ci = i = 0;
18 5dc21454 2023-07-14 jrmu
19 5dc21454 2023-07-14 jrmu while ((c = getchar())!=EOF) {
20 5dc21454 2023-07-14 jrmu if (c == ' ') {
21 5dc21454 2023-07-14 jrmu current[ci] = '\0';
22 5dc21454 2023-07-14 jrmu len = strln(current)+1;
23 5dc21454 2023-07-14 jrmu if (i+len < WIDTH) {
24 5dc21454 2023-07-14 jrmu printf("%s%c", current, c);
25 5dc21454 2023-07-14 jrmu i += len;
26 5dc21454 2023-07-14 jrmu } else {
27 5dc21454 2023-07-14 jrmu printf("\n%s%c", current, c);
28 5dc21454 2023-07-14 jrmu i = len;
29 5dc21454 2023-07-14 jrmu }
30 5dc21454 2023-07-14 jrmu ci = 0;
31 5dc21454 2023-07-14 jrmu } else if (c == '\n') {
32 5dc21454 2023-07-14 jrmu current[ci] = '\0';
33 5dc21454 2023-07-14 jrmu printf("%s%c", current, c);
34 5dc21454 2023-07-14 jrmu ci = i = 0;
35 5dc21454 2023-07-14 jrmu } else if (c == '\t') {
36 5dc21454 2023-07-14 jrmu len = strln(current)+TABSTOP;
37 5dc21454 2023-07-14 jrmu current[ci] = '\0';
38 5dc21454 2023-07-14 jrmu if (i+len < WIDTH) {
39 5dc21454 2023-07-14 jrmu printf("%s%c", current, c);
40 5dc21454 2023-07-14 jrmu i += len;
41 5dc21454 2023-07-14 jrmu } else {
42 5dc21454 2023-07-14 jrmu printf("\n%s%c", current, c);
43 5dc21454 2023-07-14 jrmu i = len;
44 5dc21454 2023-07-14 jrmu }
45 5dc21454 2023-07-14 jrmu ci = 0;
46 5dc21454 2023-07-14 jrmu } else {
47 5dc21454 2023-07-14 jrmu current[ci] = c;
48 5dc21454 2023-07-14 jrmu ++ci;
49 5dc21454 2023-07-14 jrmu }
50 5dc21454 2023-07-14 jrmu }
51 5dc21454 2023-07-14 jrmu }
52 5dc21454 2023-07-14 jrmu int strln(char s[])
53 5dc21454 2023-07-14 jrmu {
54 5dc21454 2023-07-14 jrmu int i;
55 5dc21454 2023-07-14 jrmu for (i=0; s[i] != '\0'; ++i)
56 5dc21454 2023-07-14 jrmu ;
57 5dc21454 2023-07-14 jrmu return i;
58 5dc21454 2023-07-14 jrmu }