diff --git a/The C Programming Language/1.18.c b/The C Programming Language/1.18.c new file mode 100644 index 0000000..f216973 --- /dev/null +++ b/The C Programming Language/1.18.c @@ -0,0 +1,53 @@ +#include + +#define MAXLINE 10 + +int _getline(char line[], int maxline); +void trim(char to[], char from[], int from_head); + +main() +{ + char line[MAXLINE]; + char trimmed[MAXLINE]; + + int head = _getline(line, MAXLINE); + trim(trimmed, line, head); + + printf("[%s]\n", trimmed); + + return 0; +} + +int _getline(char s[], int lim) +{ + int c, i, j; + for (i = 0; (c = getchar()) != '\n'; ++i) + { + if (i < lim - 1) + s[i] = c; + } + + j = i; + if (j > lim - 1) + j = lim - 1; + s[j] = '\0'; + return j; +} + +void trim(char to[], char from[], int from_head) +{ + int i; + int start_copying = 0; + + for (i = from_head - 1; i >= 0; --i) + { + if (start_copying == 0 && from[i] != '\t' && from[i] != ' ') + { + to[i+1] = '\0'; + start_copying = 1; + } + + if (start_copying == 1) + to[i] = from[i]; + } +}