From 5018e06c580dd21c958ec1672c26a3448faf0c55 Mon Sep 17 00:00:00 2001 From: zlg Date: Wed, 13 Feb 2013 20:48:44 -0600 Subject: Add license file, reorganize project --- ch1/1-19_reverse-lines.c | 54 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 54 insertions(+) create mode 100644 ch1/1-19_reverse-lines.c (limited to 'ch1/1-19_reverse-lines.c') diff --git a/ch1/1-19_reverse-lines.c b/ch1/1-19_reverse-lines.c new file mode 100644 index 0000000..d87b625 --- /dev/null +++ b/ch1/1-19_reverse-lines.c @@ -0,0 +1,54 @@ +#include + +#define MAXLINELENGTH 9001 + +int get_line(char s[], int limit) { + int c, i; + + for (i = 0; i < limit && (c = getchar()) != EOF && c != '\n'; ++i) { + s[i] = c; + } + + s[i] = '\0'; + + /* If I don't include this check, I can't handle blank lines */ + if (c == EOF && i == 0) { + return -1; + } else { + return i; + } + +} + +/* Directly reverse a line's contents. */ +void reverse(char input[], int size) { + int tmp; + int i = 0; + size--; + + /* If len and i are the same, then there's no reason to proceed */ + while (size > i) { + // Store the first character in a temporary spot... + tmp = input[i]; + + // ... and swap! + input[i] = input[size]; + input[size] = tmp; + + // Bring our numbers closer together + ++i; + --size; + } +} + +int main(void) { + // An int and a string to store each line's data in + int line_len; + char buffer[MAXLINELENGTH]; + + while ((line_len = get_line(buffer, MAXLINELENGTH)) != -1) { + reverse(buffer, line_len); + printf("%s\n", buffer); + } + return 0; +} -- cgit v1.2.3-54-g00ecf