Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.86/7: Рейтинг темы: голосов - 7, средняя оценка - 4.86
41 / 41 / 15
Регистрация: 29.12.2016
Сообщений: 291
1

Керниган и Ритчи, печать самой длинной строки

09.10.2017, 22:40. Показов 1310. Ответов 7
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, всем! Что-то скопировал упражнение из книги K&R "Язык программирования С", оно вобще не компилируется, решил сам написать. Вроде функция работает, массив из одного в другой копируется, но самая длинная строка на печать не выводится, как бы все зацикливается, выход никак не найду.
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <stdio.h>
 
void copy(int to[], int from[]);
 
/* печать самой длинной строки */
int main()
{
  int len = 0; /* длина текущей строки */
  int max; /* длина максимальной из просмотренных строк */
  int maxLine = 1000;
  int line[maxLine]; /* текущая строка */
  int longest[maxLine]; /* самая длинная строка */
  int c, j;
 
  while ((c = getchar()) != '\n' && len < maxLine)
    {
      line[len] = c;
      len++;
    }
 
  max = 0;
  while (len > 0)
    if (len > max)
      {
        max = len;
        copy(longest, line);
      }
  if(max > 0) { for(j = 0; j < len; j++) { printf("%c", longest[j]); } }
 
 
  return 0;
}
 
 
  /* copy: копирует из 'from' в 'to'; to достаточно большой */
  void copy(int to[], int from[])
  {
   int i = 0;
   while ((to[i] = from[i]) != '\0')
     {
       i++;
     }
 
  }
Добавлено через 52 минуты
Поисправлял ошибки в родном коде, все равно на печать ничего не выводится
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <stdio.h>
 
int getline2(char line[], int maxline);
void copy(char to[], char from[]);
/* печать самой длинной строки */
int main()
{
  int len; /* длина текущей строки */
  int max; /* длина максимальной из просмотренных строк */
  int maxline = 1000;
  char line[maxline]; /* текущая строка */
  char longest[maxline]; /* самая длинная строка */
  max = 0;
  while ((len = getline2(line, maxline)) > 0)
    if (len > max) {
        max = len;
        copy(longest, line);
      }
  if (max > 0) /* была ли хоть одна строка? */
    printf("%s", longest);
  return 0;
}
/* getline: читает строку в s, возвращает длину */
int getline2(char line[], int maxline)
{
  int c, i;
  for (i = 0; i < maxline-1 && (c = getchar()) != EOF && c != '\n'; ++i)
    line[i] = c;
  if (c == '\n') {
    line[i] = c;
    ++i;
  }
  line[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;
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.10.2017, 22:40
Ответы с готовыми решениями:

Печать самой длинной строки
Добрый день. У меня никак не получается напечатать самую длинную строку, хотя подсчитать кол-во...

Ритчи и Керниган
В этом учебники в некоторых примерах прототип функции объявляется внутри другой функции. Доля того,...

Керниган/Ритчи упражнение 1.22
&quot;Упражнение 1.22. Напишите программу, печатающую символы входного потока так, чтобы строки текста...

Указатели, Керниган и Ритчи 5.4
Здравствуйте, нужна помощь начинающему. Читаю Керниган и Ритчи и не могу понять следующую вещь:...

7
737 / 542 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
10.10.2017, 06:22 2
Лучший ответ Сообщение было отмечено LightProger как решение

Решение

Цитата Сообщение от LightProger Посмотреть сообщение
скопировал упражнение из книги K&R "Язык программирования С", оно вобще не компилируется
ну так а где функция getline?
по поводу второго кода:
Цитата Сообщение от LightProger Посмотреть сообщение
Поисправлял ошибки в родном коде
убрали макросы и сделали переменный массив?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <stdio.h>
#include <stdlib.h>
#define MAXLINE 1000
 
int getline(char line[], int);
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", longest);
    return 0;
}
int getline(char s[], int lim) /*getline:читает строку в s,возвращает длину*/
{
    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[]) /*copy: копирует из from в to; to достаточно большой*/
{
    int i;
    i = 0;
    while((to[i] = from[i]) != '\0')
        ++i;
}
1
41 / 41 / 15
Регистрация: 29.12.2016
Сообщений: 291
10.10.2017, 09:12  [ТС] 3
LFC, Все равно, ничего не печатает.
0
737 / 542 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
10.10.2017, 09:29 4
LightProger, мой код не печатает???
0
41 / 41 / 15
Регистрация: 29.12.2016
Сообщений: 291
10.10.2017, 09:36  [ТС] 5
Цитата Сообщение от LFC Посмотреть сообщение
LightProger, мой код не печатает???
Нет. Строки можно вводить и все. Так же как и у меня. при нажатии ctr+D(linux), просто программа закрывается.
0
737 / 542 / 416
Регистрация: 17.09.2015
Сообщений: 1,601
10.10.2017, 09:36 6
...
Миниатюры
Керниган и Ритчи, печать самой длинной строки  
0
41 / 41 / 15
Регистрация: 29.12.2016
Сообщений: 291
10.10.2017, 14:30  [ТС] 7
LFC, Странно, вечером попробую без IDE, скомпилировать.

Добавлено через 4 часа 45 минут
LFC, Действительно, скомпилировал в терминале, без использования IDE, все работает! Спасибо!
0
838 / 641 / 940
Регистрация: 26.06.2015
Сообщений: 1,409
10.10.2017, 18:53 8
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <stdio.h>
#include <string.h>
#include <ctype.h>
#define WLEN    64
 
int main(void){
    int  c, m, n;
    char s[WLEN], w[WLEN], *p = s, *e = s + (WLEN - 1);
 
    m  = 0;
    *p = '\0';
    do {
        c = getchar();
        if(isalnum(c) && (p < e))
            *p++ = c;
        else if(p != s){
            n  = (int)(p - s);
            *p = '\0';
            p  = s;
            if(n > m){
                m = n;
                strcpy(w, s);
            }
        }
    } while((c != EOF) && (c != '\n'));
 
    printf("word: %s\n", w); 
    printf(" len: %d\n", m);
    getchar();  
    return 0;
}
1
10.10.2017, 18:53
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.10.2017, 18:53
Помогаю со студенческими работами здесь

Керниган/ритчи задачи 1.18
Упражнение 1.18. Напишите программу, которая будет в каждой вводимой строке заменять стоящие подряд...

Керниган/Ритчи упражнение 1.20
&quot;Упражнение 1.20. Напишите программу detab, заменяющую символы табуляции во вводимом тексте нужным...

Керниган Ритчи Упражнение 2.2
Добрый день. Помогите начинающему разобраться пожалуйста. Само задание я решил, но...

Компилятор С(Керниган ,Ритчи)
Здравствуйте! Открыл книгу Брайана Кернигана и Денниса Ритчи. Первое задание MAIN()...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru