aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorzlg <zlg@zlg.space>2012-08-11 19:46:16 -0400
committerzlg <zlg@zlg.space>2012-08-11 19:46:16 -0400
commit3672d30458406a62f5d3e3e51547e37e09515dea (patch)
tree05e50179b354c22b8e530f87b01b2de2db4f517b
parentInitial commit (diff)
downloadknr-3672d30458406a62f5d3e3e51547e37e09515dea.tar.gz
knr-3672d30458406a62f5d3e3e51547e37e09515dea.tar.bz2
knr-3672d30458406a62f5d3e3e51547e37e09515dea.tar.xz
knr-3672d30458406a62f5d3e3e51547e37e09515dea.zip
Solve exercise 1.18
Diffstat (limited to '')
-rw-r--r--1-18_strip-blanks.c38
1 files changed, 38 insertions, 0 deletions
diff --git a/1-18_strip-blanks.c b/1-18_strip-blanks.c
new file mode 100644
index 0000000..c766445
--- /dev/null
+++ b/1-18_strip-blanks.c
@@ -0,0 +1,38 @@
+#include <stdio.h>
+
+#define MAXLINELENGTH 9001
+/* Write a program to remove trailing blanks and tabs from each line of input,
+ and to delete entirely blank lines. */
+
+int get_line(char s[], int lim) {
+ int c, i;
+
+ for (i = 0; i < lim - 1 && (c = getchar()) != EOF && c != '\n'; ++i) {
+ s[i] = c;
+ }
+ if (c == '\n') {
+ s[i] = c;
+ ++i;
+ }
+ s[i + 1] = '\0';
+ return i;
+}
+
+int main(void) {
+ char buffer[MAXLINELENGTH];
+ int c, i, len;
+
+ /* Make sure every line is gone over */
+ while (len = get_line(buffer, MAXLINELENGTH)) {
+ /* An empty for statement, simply to change the i variable. */
+ for (i = len - 2; (i > 0) && (buffer[i] == ' ') || (buffer[i] == '\t'); --i);
+
+ /* We've reached the end of the line's actual content. Terminate the line. */
+ if (i >= 1) {
+ buffer[i + 1] = '\n';
+ buffer[i + 2] = '\0';
+ printf("%s", buffer);
+ }
+ }
+}
+