diff options
author | zlg <zlg@zlg.space> | 2012-08-11 19:46:16 -0400 |
---|---|---|
committer | zlg <zlg@zlg.space> | 2012-08-11 19:46:16 -0400 |
commit | 3672d30458406a62f5d3e3e51547e37e09515dea (patch) | |
tree | 05e50179b354c22b8e530f87b01b2de2db4f517b | |
parent | Initial commit (diff) | |
download | knr-3672d30458406a62f5d3e3e51547e37e09515dea.tar.gz knr-3672d30458406a62f5d3e3e51547e37e09515dea.tar.bz2 knr-3672d30458406a62f5d3e3e51547e37e09515dea.tar.xz knr-3672d30458406a62f5d3e3e51547e37e09515dea.zip |
Solve exercise 1.18
-rw-r--r-- | 1-18_strip-blanks.c | 38 |
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); + } + } +} + |