Взрослая социальная сеть |
CODE |
#include <stdio.h> #define MAXLINE 1000 /* максимальная длина строки в потоке */ int getline(char line[], int maxline); void copy(char to[], char from[]); /* вывод самой длинной строки в потоке */ int main() { int len; /* длина текущей строки */ int max; /* текущая максимальная длина */ char line[MAXLINE]; /* текущая введенная строка */ char longest[MAXLINE]; /* самая длинная строка из введенных */ max = 0; while ((len = getline(line, MAXLINE)) > 0) { if (len > max) { max = len; copy(longest, line); } } if (max > 0) { /* была непустая строка */ printf("%s\n", longest); } return 0; } /* getline: считывает строку в s, возвращает ее длину */ int getline (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: копирует строку 'from' в 'to'; длина to считается достаточно точной */ void copy(char to[], char from[]) { int i; i = 0; while ((to[i] = from[i]) != '\0') ++i; } |
QUOTE (JeyLo @ 26.03.2010 - время: 23:18) |
http://clc-wiki.net/wiki/K&R2_solutions:Ch...r_1:Exercise_16 Решение Richard Heathfield игнорируйте. Он читер. |
QUOTE (Rodriga-Gamilton @ 31.03.2010 - время: 15:18) |
Да все там читеры и халявшики. Они только считают длину строки, но не выводят ее. Причем считают вместе с нулевым символом. Неплохая идея у arnuld, но с реализацией хреновато. |
QUOTE (JeyLo @ 31.03.2010 - время: 16:09) |
Revise the main routine of the longest-line program so it will correctly print the length of arbitrarily long input lines, and as much as possible of the text. Последнее выделение - as much as possible не значит лимит памяти или жесткого диска. А лимит, существующий и указанный в задаче. Задача - исправить, а не переписать. Не умножайте сущности сверх необходимости. :) |
QUOTE (Rodriga-Gamilton @ 31.03.2010 - время: 16:49) |
В переведонном учебнике в примере отсутствует вывод длины строки, есть только вывод строки. as much as possible of the text, т.е. имеется в виду текст программы, а не входной поток? |
CODE |
int main() { int len; /* длина полученной части строки или всей строки */ int max; /* текущая максимальная длина */ int current; /* длина текущей строки */ char line[MAXLINE]; /* текущая строка или часть строки */ char longest[MAXLINE]; /* последняя часть самой длинной строки из введенных */ current = 0; max = 0; while ((len = getline(line, MAXLINE)) > 0) { current += len; if ( line[len-1] == '\n' ) ... |
QUOTE (Rodriga-Gamilton @ 31.03.2010 - время: 16:49) |
[Мдэ, столько времени потрачено на битвы с мельницами. |
QUOTE (Rodriga-Gamilton @ 01.04.2010 - время: 12:11) |
Спасибо за помощь. |
Рекомендуем почитать также топики: Проблема с VPN соединением.. Во что играем? Экономические игры Советы бывалых Rich Media Player: как избежать зацикливания? |