Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Задача из учебника по С

18K
01 августа 2006 года
Dragomaster
2 / / 20.07.2006
вот исходник:
Код:
#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 этой программы так, чтобы она могла печатать самую длинную строку без каких-либо ограничений на ее размер.

не пойму как это сделать?
3.0K
02 августа 2006 года
ctraus
91 / / 16.06.2006
А если вместо массивов указатели?т.е не line[MAXLINE], longest[MAXLINE],а *line,*longest?
273
02 августа 2006 года
3A3-968M
1.2K / / 22.12.2005
[quote=ctraus]А если вместо массивов указатели?т.е не line[MAXLINE], longest[MAXLINE],а *line,*longest?[/quote]
Мда, а по-моему надо тупо убить условие <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]
1.9K
03 августа 2006 года
[*]Frosty
278 / / 17.06.2006
23A3-968M
[QUOTE=Dragomaster]вот исходник:
а теперь сама задача: Перепишите main этой программы так, чтобы она могла печатать самую длинную строку без каких-либо ограничений на ее размер.

не пойму как это сделать?[/QUOTE]

Мне кажиться нужно двойной цикл. Нет сегодня времени.

2Dragomaster
Из какого раздела книги задачка?
1.9K
03 августа 2006 года
[*]Frosty
278 / / 17.06.2006
Что-то вроде этого возможно?

Код:
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;
}


2 3A3-968M Использование ограничения в getline, хороший стиль) и данная ф getline точна копия библиотечной, по крайней мере по механизму.

Харбисон-Стил forever!

З.Ы. Тут кроме изменений в функции main, потребовалось:
[COLOR="SeaGreen"]#include<stdlib.h>[/COLOR] )))))))))))))))
18K
04 августа 2006 года
Dragomaster
2 / / 20.07.2006
[QUOTE='
  • Frosty']2Dragomaster
    Из какого раздела книги задачка?[/QUOTE]

    задачка из раздела Символьные массивы. Глава 1. Обзор языка.
    Книга: Язык программирования С.
    Авторы: Керниган Б., Ритчи Д.

    2All сорри что не отвечал... над другими парился.

    Спасибо за помощь. Всё робит.
  • Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
    Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог