#include <stdio.h>
#define MAXLINE 40 /* maximum input line size */
int getlines(char line[], int maxline);
void copy(char to[], char from[]);
/* print longest input line */
int main()
{
int c;
int len; /* current line length */
int max; /* maximum length seen so far */
char line[MAXLINE]; /* current input line */
char longest[MAXLINE]; /* longest line saved here */
max = 0;
while ((len = getlines(line, MAXLINE)) > 0) {
if (line[len-1] != '\n')
while ((c
= getchar()) != EOF
&& c
!= '\n') ++len;
if (len > max) {
max = len;
copy(longest, line);
}
}
if (max > 0) { /* there was a line */
printf("Longest line with %d characters:\n", max
); }
return 0;
}
/* getline: read a line s, return length */
int getlines(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] = '\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;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CgojZGVmaW5lIE1BWExJTkUgNDAgLyogbWF4aW11bSBpbnB1dCBsaW5lIHNpemUgKi8KCmludCBnZXRsaW5lcyhjaGFyIGxpbmVbXSwgaW50IG1heGxpbmUpOwp2b2lkIGNvcHkoY2hhciB0b1tdLCBjaGFyIGZyb21bXSk7CgovKiBwcmludCBsb25nZXN0IGlucHV0IGxpbmUgKi8KaW50IG1haW4oKQp7CiAgICBpbnQgYzsKICAgIGludCBsZW47ICAgIC8qIGN1cnJlbnQgbGluZSBsZW5ndGggKi8KICAgIGludCBtYXg7ICAgIC8qIG1heGltdW0gbGVuZ3RoIHNlZW4gc28gZmFyICovCiAgICBjaGFyIGxpbmVbTUFYTElORV07ICAgICAvKiBjdXJyZW50IGlucHV0IGxpbmUgKi8KICAgIGNoYXIgbG9uZ2VzdFtNQVhMSU5FXTsgIC8qIGxvbmdlc3QgbGluZSBzYXZlZCBoZXJlICovCgogICAgbWF4ID0gMDsKCiAgICB3aGlsZSAoKGxlbiA9IGdldGxpbmVzKGxpbmUsIE1BWExJTkUpKSA+IDApIHsKICAgICAgICBpZiAobGluZVtsZW4tMV0gIT0gJ1xuJykKICAgICAgICAgICAgd2hpbGUgKChjID0gZ2V0Y2hhcigpKSAhPSBFT0YgJiYgYyAhPSAnXG4nKQogICAgICAgICAgICAgICAgKytsZW47CgogICAgICAgIGlmIChsZW4gPiBtYXgpIHsKICAgICAgICAgICAgbWF4ID0gbGVuOwogICAgICAgICAgICBjb3B5KGxvbmdlc3QsIGxpbmUpOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAobWF4ID4gMCkgeyAgICAvKiB0aGVyZSB3YXMgYSBsaW5lICovCiAgICAgICAgcHJpbnRmKCJMb25nZXN0IGxpbmUgd2l0aCAlZCBjaGFyYWN0ZXJzOlxuIiwgbWF4KTsKICAgICAgICBwcmludGYoIiVzIC4uLlxuIiwgbG9uZ2VzdCk7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0KCi8qIGdldGxpbmU6IHJlYWQgYSBsaW5lIHMsIHJldHVybiBsZW5ndGggKi8KaW50IGdldGxpbmVzKGNoYXIgc1tdLCBpbnQgbGltKQp7CiAgICBpbnQgYywgaTsKCiAgICBmb3IgKGkgPSAwOyBpIDwgbGltLTEgJiYgKGMgPSBnZXRjaGFyKCkpICE9IEVPRiAmJiBjICE9ICdcbic7ICsraSkKICAgICAgICBzW2ldID0gYzsKICAgIGlmIChjID09ICdcbicpIHsKICAgICAgICBzW2ldID0gYzsKICAgICAgICArK2k7CiAgICB9CiAgICBzW2ldID0gJ1wwJzsKCiAgICByZXR1cm4gaTsKfQoKLyogY29weTogY29weSAnZnJvbScgaW50byAndG8nOyBhc3N1bWUgdG8gaXMgYmlnIGVub3VnaCAqLwp2b2lkIGNvcHkoY2hhciB0b1tdLCBjaGFyIGZyb21bXSkKewogICAgaW50IGk7CgogICAgaSA9IDA7CiAgICB3aGlsZSAoKHRvW2ldID0gZnJvbVtpXSkgIT0gJ1wwJykKICAgICAgICArK2k7Cn0K