Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Иван Васильев
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 15
1

Получить самую длинную строку файла

07.10.2016, 11:58. Просмотров 388. Ответов 7
Метки нет (Все метки)

Дан текстовый файл f. Получите самую длинную строку файла. Если в файле имеется несколько строк с наибольшей длиной, то получить первую из них. Нужно на СИ
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2016, 11:58
Ответы с готовыми решениями:

Дан текстовый файл f. Найти самую длинную строку файла
Дан текстовый файл f. Найти самую длинную строку файла.

Найти самую длинную строку и удалить её
Подскажите пожалуйста, где ошибки. И в правильном ли русле я иду. #include...

Найти самую длинную строку в файле
Собственно прога находит самую длинную строку в файле, но если длинных строк ...

Найти самую длинную строку и поместить ее после самой короткой
Необходимо написать программу на языке Си, буду очень благодарен за помощь! ...

В массиве найти самую длинную строку и поставить ее после самой короткой
дан массив строк. максимальное число символов в строке 80, число строк 6. найти...

7
easybudda
Модератор
Эксперт CЭксперт С++
10210 / 6107 / 1536
Регистрация: 25.07.2009
Сообщений: 11,606
07.10.2016, 13:03 2
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 <glib.h>
 
int main(int argc, char ** argv) {
    if ( argc < 2 ) {
        g_print("USAGE: %s <input_file>\n", *argv);
        return 1;
    }
    
    GError * err = NULL;
    
    GIOChannel * fin = g_io_channel_new_file(argv[1], "r", &err);
    if ( ! fin ) {
        g_print("Can't open input file: %s\n", ( err ) ? err->message : "Unknown error");
        return 1;
    }
    
    GString * current = g_string_new("");
    GString * longest = g_string_new("");
    
    while ( g_io_channel_read_line_string(fin, current, NULL, &err) == G_IO_STATUS_NORMAL )
        if ( current->len > longest->len )
            g_string_assign(longest, current->str);
    
    g_io_channel_shutdown(fin, FALSE, &err);
    g_print("Longest line:\n%s", longest->str);
    
    g_string_free(longest, TRUE);
    g_string_free(current, TRUE);
    
    return 0;
}
Код
andrew@andrew0716 ~/c/glib
$ gcc -o longest_line longest_line.c `pkg-config --cflags --libs glib-2.0`

andrew@andrew0716 ~/c/glib
$ ./longest_line longest_line.c
Longest line:
        while ( g_io_channel_read_line_string(fin, current, NULL, &err) == G_IO_STATUS_NORMAL )

andrew@andrew0716 ~/c/glib
$
И не благодари!
0
Иван Васильев
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 15
07.10.2016, 15:17  [ТС] 3
А где писать путь к .txt?

Добавлено через 1 час 26 минут
И чего-то компилятор Codeblocks не видит glib.h...
0
easybudda
Модератор
Эксперт CЭксперт С++
10210 / 6107 / 1536
Регистрация: 25.07.2009
Сообщений: 11,606
07.10.2016, 15:18 4
Цитата Сообщение от Иван Васильев Посмотреть сообщение
А где писать путь к .txt?
параметром при вызове программы задаётся.
0
Иван Васильев
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 15
07.10.2016, 15:24  [ТС] 5
Вот что выдало
0
Миниатюры
Получить самую длинную строку файла  
MansMI
1450 / 1159 / 550
Регистрация: 08.01.2012
Сообщений: 4,509
07.10.2016, 18:00 6
C
1
2
3
4
5
6
7
8
9
10
    FILE *f;
    char s[1000],m[1000]="";
 
    printf("file:");
    gets(s);
    f=fopen(s,"r");
    while(fgets(s,100,f))
        if(strlen(m)<strlen(s)) strcpy(m,s);
    printf("\n%s\n",m);
    system("pause");
0
easybudda
Модератор
Эксперт CЭксперт С++
10210 / 6107 / 1536
Регистрация: 25.07.2009
Сообщений: 11,606
07.10.2016, 20:21 7
Цитата Сообщение от Иван Васильев Посмотреть сообщение
И чего-то компилятор Codeblocks не видит glib.h...
Это не из стандартной библиотеки С. В линуксах, как правило, "из коробки" стоит, в других юниксах (включая макось на букву Х) ставится с пол-пинка. В виндовсах вроде тоже ставится, но тут я Вам не помощник!
0
Иван Васильев
0 / 0 / 0
Регистрация: 05.10.2016
Сообщений: 15
07.10.2016, 21:05  [ТС] 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
32
33
34
35
36
37
38
39
40
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
 
typedef std::vector<std::string>::size_type vec_size;
 
int main() {
  setlocale(0, "");
  std::ifstream ifs("m.txt");
  std::vector<std::string> vec;
  std::string myString;
  vec_size max_size = 0;
  int index = 0;
 
  if(!ifs) {
    std::cerr << "Файл открыть не удалось" << std::endl;
    std::cin.get();
    return 1;
  } else {
    for(int i = 0; std::getline(ifs, myString); ++i) {
      vec.push_back(myString);
      if(vec[i].size() > max_size) {
        max_size = vec[i].size();
        index = i;
      }
    }
  }
 
  vec_size size = vec.size();
  std::cout << "Считанные строки из файла: " << std::endl;
 
  for(int i = 0; i != size; ++i)
    std::cout << i+1 << ". " << vec[i] << std::endl;
 
  std::cout << std::endl << "Строка с максимальной длиной под номером " << index+1
  << std::endl << vec[index] << std::endl;
 
  return 0;
}



Вот у меня есть эта прога на Си++.Можно ли как-то переделать безо всяких glib'ов на Си?
0
07.10.2016, 21:05
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.10.2016, 21:05

Напечатать самую длинную строку без каких-либо ограничений на её размер
Изучаю Си по книжке Кернигана-Ричи. Нахожусь в самом начале. Из структур прошла...

Напечатать самую длинную строку без каких-либо ограничений на её размер
Здравствуйте! Внезапно уже в первой главе книги столкнулся с проблемами в...

В тексте найти самую длинную и самую короткую строки и поменять их местами
в тексте найти самую длинную и самую короткую строки и поменять их местами


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru