#include <stdio.h>
#define MAXLINE 1000
int getline(char s[], int lim)
{
int c, i;
for (i=0; i<lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)
s=c;
if (c=='\n')
{
s=c;
++i;
}
s='\0';
return i;
}
void copy(char to[], char from[])
{
int i=0;
while ((to=from)!='\0')
++i;
}
void main()
{
int len, max=0;
char line[MAXLINE], longest[MAXLINE];
char
while((len=getline(line, MAXLINE))>0)
if (len>max)
{
max=len;
copy(longest, line);
}
if (max>0)
printf("Длиннейшая строка: %s", longest);
}
Задача из учебника по С
Код:
а теперь сама задача: Перепишите main этой программы так, чтобы она могла печатать самую длинную строку без каких-либо ограничений на ее размер.
не пойму как это сделать?
А если вместо массивов указатели?т.е не line[MAXLINE], longest[MAXLINE],а *line,*longest?
Мда, а по-моему надо тупо убить условие <lim-1, вот так:
Код:
[LEFT][FONT=Courier New]#include <stdio.h>[/FONT]
[FONT=Courier New][/FONT][FONT=Courier New]
int getline(char *s)
{
int c, i;
for (i=0; (c=getchar())!=EOF && c!='\n'; ++i)
s=c;
if (c=='\n')
{
s=c;
++i;
}
s='\0';
return i;
}
void copy(char to[], char from[])
{
int i=0;
while ((to=from)!='\0')
++i;
}
void main()
{
int len, max=0;
char *line, *longest
....
while((len=getline(line))>0)
if (len>max)
{
max=len;
copy(longest, line);
}
if (max>0)
printf("Длиннейшая строка: %s", longest);
}[/FONT][/LEFT]
[FONT=Courier New][/FONT][FONT=Courier New]
int getline(char *s)
{
int c, i;
for (i=0; (c=getchar())!=EOF && c!='\n'; ++i)
s=c;
if (c=='\n')
{
s=c;
++i;
}
s='\0';
return i;
}
void copy(char to[], char from[])
{
int i=0;
while ((to=from)!='\0')
++i;
}
void main()
{
int len, max=0;
char *line, *longest
....
while((len=getline(line))>0)
if (len>max)
{
max=len;
copy(longest, line);
}
if (max>0)
printf("Длиннейшая строка: %s", longest);
}[/FONT][/LEFT]
[QUOTE=Dragomaster]вот исходник:
а теперь сама задача: Перепишите main этой программы так, чтобы она могла печатать самую длинную строку без каких-либо ограничений на ее размер.
не пойму как это сделать?[/QUOTE]
Мне кажиться нужно двойной цикл. Нет сегодня времени.
2Dragomaster
Из какого раздела книги задачка?
Код:
int main(int argc, char* argv[])
{
int len, max = 0;
char *line, *longest;
line = (char *)malloc(MAXLINE);
longest = (char *)malloc(MAXLINE);
if(line == NULL || longest == NULL)
exit(EXIT_FAILURE);
while((len = getline(line, MAXLINE)) > 0)// Читаем первые символы в line, но неболее MAXLINE
{
int lenT = len;
while(line[len - 1] != '\n' && lenT > 0)// Если не конец строки, то читаем следующие символы, но за раз не более MAXLINE, и добавляем их к line
{
line = (char *)realloc(line, len + MAXLINE - 1);// Перераспределяем память
if(line == NULL)
exit(EXIT_FAILURE);
lenT = getline(line + len - 1, MAXLINE);
len += lenT - 1;
}
if (len > max)
{
max=len;
longest = (char *)realloc(longest, len);
if(longest == NULL)
exit(EXIT_FAILURE);
copy(longest, line);
}
}
free(line);
if (max>0)
printf("Longest line: %s - %d", longest, max);
free(longest);
getchar();
return 0;
}
{
int len, max = 0;
char *line, *longest;
line = (char *)malloc(MAXLINE);
longest = (char *)malloc(MAXLINE);
if(line == NULL || longest == NULL)
exit(EXIT_FAILURE);
while((len = getline(line, MAXLINE)) > 0)// Читаем первые символы в line, но неболее MAXLINE
{
int lenT = len;
while(line[len - 1] != '\n' && lenT > 0)// Если не конец строки, то читаем следующие символы, но за раз не более MAXLINE, и добавляем их к line
{
line = (char *)realloc(line, len + MAXLINE - 1);// Перераспределяем память
if(line == NULL)
exit(EXIT_FAILURE);
lenT = getline(line + len - 1, MAXLINE);
len += lenT - 1;
}
if (len > max)
{
max=len;
longest = (char *)realloc(longest, len);
if(longest == NULL)
exit(EXIT_FAILURE);
copy(longest, line);
}
}
free(line);
if (max>0)
printf("Longest line: %s - %d", longest, max);
free(longest);
getchar();
return 0;
}
2 3A3-968M Использование ограничения в getline, хороший стиль) и данная ф getline точна копия библиотечной, по крайней мере по механизму.
Харбисон-Стил forever!
З.Ы. Тут кроме изменений в функции main, потребовалось:
[COLOR="SeaGreen"]#include<stdlib.h>[/COLOR] )))))))))))))))
Из какого раздела книги задачка?[/QUOTE]
задачка из раздела Символьные массивы. Глава 1. Обзор языка.
Книга: Язык программирования С.
Авторы: Керниган Б., Ритчи Д.
2All сорри что не отвечал... над другими парился.
Спасибо за помощь. Всё робит.