summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--char_hist.c (renamed from charhist.c)0
-rw-r--r--longest_line.c58
-rw-r--r--num_digits.c (renamed from numdigits.c)0
-rw-r--r--one_word.c (renamed from oneword.c)0
-rw-r--r--word_hist.c (renamed from wordhist.c)0
5 files changed, 58 insertions, 0 deletions
diff --git a/charhist.c b/char_hist.c
index 312df76..312df76 100644
--- a/charhist.c
+++ b/char_hist.c
diff --git a/longest_line.c b/longest_line.c
new file mode 100644
index 0000000..58f2a72
--- /dev/null
+++ b/longest_line.c
@@ -0,0 +1,58 @@
+#include<stdio.h>
+#define MAXLENGTH 1000
+
+int get_line(char line[], int maxlength);
+void copy(char to[], char from[]);
+
+/*
+ * MAIN
+ * Prints longest line in STDIN.
+ */
+main() {
+ int len; // current line length
+ int max; // maximum length seen so far
+ char line[MAXLENGTH]; // current input line
+ char longest[MAXLENGTH]; // longest line saved here
+
+ max = 0;
+ while ((len = get_line(line, MAXLENGTH)) > 0)
+ if (len > max) {
+ max = len;
+ copy(longest, line);
+ }
+ if (max > 0) // there was a line
+ printf("%d\t", max);
+ printf("%s", longest);
+ return 0;
+}
+
+/*
+ * GET_LINE
+ * Read STDIN into LINE up to MAXLENGTH and return its length.
+ * Returns the length of a the line.
+ */
+int get_line(char line[], int maxlength) {
+ int c, i;
+
+ for (i = 0; i < maxlength - 1 && (c = getchar()) != EOF && c != '\n'; ++i)
+ line[i] = c;
+ if (c == '\n') {
+ line[i] = c;
+ ++i;
+ }
+ line[i] = '\0';
+ return i;
+}
+
+/*
+ * COPY
+ * Copy FROM into TO; assume TO is big enough.
+ */
+void copy(char to[], char from[]) {
+ int i;
+
+ i = 0;
+ while ((to[i] = from[i]) != '\0')
+ ++i;
+}
+
diff --git a/numdigits.c b/num_digits.c
index c25fc29..c25fc29 100644
--- a/numdigits.c
+++ b/num_digits.c
diff --git a/oneword.c b/one_word.c
index 8d50542..8d50542 100644
--- a/oneword.c
+++ b/one_word.c
diff --git a/wordhist.c b/word_hist.c
index 965c1b9..965c1b9 100644
--- a/wordhist.c
+++ b/word_hist.c