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
3 5dc21454 2023-07-14 jrmu * lines after the last non-blank character that occurs before the n-th
4 5dc21454 2023-07-14 jrmu * column of input. Make sure your program does something intelligent with
5 5dc21454 2023-07-14 jrmu * very long lines, and if there are no blanks or tabs before the specified
6 5dc21454 2023-07-14 jrmu * column.
7 5dc21454 2023-07-14 jrmu */
8 5dc21454 2023-07-14 jrmu
9 5dc21454 2023-07-14 jrmu #include <stdio.h>
10 5dc21454 2023-07-14 jrmu #define WIDTH 80
11 5dc21454 2023-07-14 jrmu #define TABSTOP 8
12 5dc21454 2023-07-14 jrmu
13 5dc21454 2023-07-14 jrmu int strln(char s[]);
14 5dc21454 2023-07-14 jrmu void copy(char to[], char from[]);
15 5dc21454 2023-07-14 jrmu
16 5dc21454 2023-07-14 jrmu main()
17 5dc21454 2023-07-14 jrmu {
18 5dc21454 2023-07-14 jrmu int c, i, ci;
19 5dc21454 2023-07-14 jrmu char current[WIDTH+1];
20 5dc21454 2023-07-14 jrmu int len;
21 5dc21454 2023-07-14 jrmu
22 5dc21454 2023-07-14 jrmu ci = i = 0;
23 5dc21454 2023-07-14 jrmu
24 5dc21454 2023-07-14 jrmu while ((c = getchar())!=EOF) {
25 5dc21454 2023-07-14 jrmu if (c == ' ') {
26 5dc21454 2023-07-14 jrmu current[ci] = '\0';
27 5dc21454 2023-07-14 jrmu len = strln(current)+1;
28 5dc21454 2023-07-14 jrmu if (i+len <= WIDTH) {
29 5dc21454 2023-07-14 jrmu printf("%s%c", current, c);
30 5dc21454 2023-07-14 jrmu i += len;
31 5dc21454 2023-07-14 jrmu } else {
32 5dc21454 2023-07-14 jrmu printf("\n%s%c", current, c);
33 5dc21454 2023-07-14 jrmu i = len;
34 5dc21454 2023-07-14 jrmu }
35 5dc21454 2023-07-14 jrmu ci = 0;
36 5dc21454 2023-07-14 jrmu } else if (c == '\n') {
37 5dc21454 2023-07-14 jrmu current[ci] = '\0';
38 5dc21454 2023-07-14 jrmu printf("%s%c", current, c);
39 5dc21454 2023-07-14 jrmu ci = i = 0;
40 5dc21454 2023-07-14 jrmu } else if (c == '\t') {
41 5dc21454 2023-07-14 jrmu len = strln(current)+TABSTOP;
42 5dc21454 2023-07-14 jrmu current[ci] = '\0';
43 5dc21454 2023-07-14 jrmu if (i+len <= WIDTH) {
44 5dc21454 2023-07-14 jrmu printf("%s%c", current, c);
45 5dc21454 2023-07-14 jrmu i += len;
46 5dc21454 2023-07-14 jrmu } else {
47 5dc21454 2023-07-14 jrmu printf("\n%s%c", current, c);
48 5dc21454 2023-07-14 jrmu i = len;
49 5dc21454 2023-07-14 jrmu }
50 5dc21454 2023-07-14 jrmu ci = 0;
51 5dc21454 2023-07-14 jrmu } else {
52 5dc21454 2023-07-14 jrmu len = strln(current)+1;
53 5dc21454 2023-07-14 jrmu if (i+len <= WIDTH) {
54 5dc21454 2023-07-14 jrmu current[ci] = c;
55 5dc21454 2023-07-14 jrmu ++ci;
56 5dc21454 2023-07-14 jrmu } else {
57 5dc21454 2023-07-14 jrmu current[ci] = '\0';
58 5dc21454 2023-07-14 jrmu printf("%s\n%c", current, c);
59 5dc21454 2023-07-14 jrmu ci = 0;
60 5dc21454 2023-07-14 jrmu i = 1;
61 5dc21454 2023-07-14 jrmu }
62 5dc21454 2023-07-14 jrmu }
63 5dc21454 2023-07-14 jrmu current[ci] = '\0';
64 5dc21454 2023-07-14 jrmu }
65 5dc21454 2023-07-14 jrmu }
66 5dc21454 2023-07-14 jrmu int strln(char s[])
67 5dc21454 2023-07-14 jrmu {
68 5dc21454 2023-07-14 jrmu int i;
69 5dc21454 2023-07-14 jrmu for (i=0; s[i] != '\0'; ++i)
70 5dc21454 2023-07-14 jrmu ;
71 5dc21454 2023-07-14 jrmu return i;
72 5dc21454 2023-07-14 jrmu }
73 5dc21454 2023-07-14 jrmu void copy(char to[], char from[])
74 5dc21454 2023-07-14 jrmu {
75 5dc21454 2023-07-14 jrmu int i;
76 5dc21454 2023-07-14 jrmu i = 0;
77 5dc21454 2023-07-14 jrmu while ((to[i] = from[i]) != '\0')
78 5dc21454 2023-07-14 jrmu ++i;
79 5dc21454 2023-07-14 jrmu }