Страницы

Translate

пятница, 12 июля 2013 г.

Упражнение 1.16. Перепишите main предыдущей программы так, чтобы она могла печатать самую длинную строку без каких-либо ограничений на ее размер.

Упражнение 1.16.
В русском варианте перевод какой-то неточный, дословно перевод говорит, что надо определить длину вводимой строки, вывести её на экран и напечатать часть текста(которая входит в диапазон массива).


#include <stdio.h>
#define MAXLINE 10 // максимальный размер вводимой строки

int getlin(char line[], int MAX);
void copy(char to[], char from[]);


/*печать самой длинной строки*/
int main()
{
    int len; //длина текущей строки
    int max; //длина максимальной из просмотренных строк
    char line[MAXLINE]; //текущая строка
    char longest[MAXLINE]; //самая длинная строка
    int c;
    max=0;
    while((len=getlin(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<MAXLINE) // вычитаем нулевой символ вставленный в getlin
      max--;
   if(max>0)
   {
      printf("Самая длинная строка\n");
      if(max>MAXLINE)
         printf("%s...\n", longest);
      else
         printf("%s\n", longest);
    }
    printf("длинa строки - %d символов\n", max);
     return 0;
}

/*getlin читает строку в s, возвращает длину*/
int getlin(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;
}

void copy(char to[], char from[])
{
    int i;
    i=0;
    while((to[i] = from[i]) != '\0')
        i++;
}



Результат:


1 комментарий:

  1. Доброго времени суток! Подскажите для чего нужна эти инстркуции:
    if(line[len-1] != '\n')
    while((c=getchar())!=EOF && c!='\n')
    len++;
    И что означает многоточие здесь printf("%s...\n", longest);

    ОтветитьУдалить