Форум программистов, компьютерный форум CyberForum.ru

Поиск самой длинной строки в файле - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.83
Lebovsky
1 / 1 / 0
Регистрация: 20.06.2011
Сообщений: 5
20.06.2011, 23:55     Поиск самой длинной строки в файле #1
дана такая задача:
Дан текстовый файл f. Вывести самую длинную строку файла. Если в файле имеется несколько строк с наибольшей длиной, то вывести все эти строки. Записать в перевёрнутом виде строки файла f в файл g. Порядок строк в файле g должен совпадать с порядком исходных строк в файле f.
Моя просьба написать программу максимально простым способом подходящим под эти условия.
Сразу огромное спасибо за то что уделите внимание и огромное спасибо вдвойне тому кто напишет
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.06.2011, 23:55     Поиск самой длинной строки в файле
Посмотрите здесь:

Поиск самой длинной неубывающей подпоследовательности C++
C++ Вывести номер строки матрицы с самой длинной последовательностью одинаковых элементов
C++,шаблон,специализация,поиск самой большой строки в массиве указателей на char C++
C++ Нахождение номера самой длинной строки в матрице
C++ Переделать функцию поиска самой длинной строки так, чтобы она правильно печатала размер произвольно длинной входной строки и воспроизводила ее
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.06.2011, 00:32     Поиск самой длинной строки в файле #2
Цитата Сообщение от Lebovsky Посмотреть сообщение
простым способом подходящим под эти условия.
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 <algorithm>
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
 
int  main()
{
    std::ifstream ifile("1.txt");
    std::vector<std::string> vec_str;
    std::string tmpstr;
    while(!ifile.eof())
    {
    std::getline(ifile, tmpstr, '\n');
    vec_str.push_back(tmpstr);
    }
    tmpstr = *std::max_element(vec_str.cbegin(), vec_str.cend(), [](const std::string & a, const std::string & b)
    {
    return a.length() < b.length();
    });
    std::cout << tmpstr << '\n';
    std::ofstream ofile("2.txt");
    std::for_each(vec_str.begin(), vec_str.end(), [&ofile, &tmpstr](std::string & str)
    {
    if(str.length() == tmpstr.length() && str != tmpstr)
        std::cout << str << '\n';
    std::reverse(str.begin(), str.end());
    ofile << str << '\n';
    });
    std::getchar();
}
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
21.06.2011, 00:42     Поиск самой длинной строки в файле #3
Ещё проще будет так.

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
45
46
47
48
49
50
51
52
53
#include <vector>
#include <fstream>
#include <iostream>
#include <algorithm>
#include <conio.h>
using namespace std;
 
 
 
 
 void  main(void){
 
    fstream file;
    file.open("X:\\f.txt", ios_base::in | ios_base::out); 
    file.seekp(0);
    vector<string>  line;
 
    while(!  file.eof() ) {
        char buf[1024];
        file.getline(buf, sizeof(buf), '\n');
        line.push_back( buf );
    }
    file.close();
    file.clear();
 
           // подсчитываем максимальные строки
    int _max = 0;
    for(int i = 0; i < line.size(); i++) {
        if( line[i].length() > _max )
            _max = line[i].length();
    }
    for(vector<string>::iterator  p = line.begin(); p != line.end(); *p++) {
          if( (*p).length() == _max)
                cout << (*p).c_str() << endl;
    }
 
 
    for(int k = 0; k < line.size(); k++) 
        reverse( line[k].begin(),  line[k].end() );
 
 
           // сохраним в файл реверсированные строки
    file.open("X:\\g.txt", ios_base::out );
    file.seekg(0); 
    for(int v = 0; v < line.size(); v++) {
            file.write(line[v].c_str(),  line[v].length());
            file.put( '\n' );
    }
    file.flush();
    file.close();
 
         cin.get();
}
Serhiy:)
 Аватар для Serhiy:)
2 / 2 / 1
Регистрация: 09.10.2010
Сообщений: 72
21.06.2011, 00:43     Поиск самой длинной строки в файле #4
http://www.cyberforum.ru/newreply.ph...te=1&p=1780002

Добавлено через 17 секунд
http://www.cyberforum.ru/newreply.ph...rforum.ru/newr

Добавлено через 22 секунды
http://www.cyberforum.ru/newreply.ph...80002ыфсфысфыс

Добавлено через 17 секунд
http://www.cyberforum.ru/newreply.ph...rforum.ru/newr
Lebovsky
1 / 1 / 0
Регистрация: 20.06.2011
Сообщений: 5
21.06.2011, 01:07  [ТС]     Поиск самой длинной строки в файле #5
Люди вы все тут гении) вам большое человеческое спасибо) и клацну) но еще так в контексте скажу что из 5 введенных библиотек я знаком с 1 - <iostream> а мне поставлена вот такая задача
Благодарен)
один вопрос: и в первом коде и во втором написано 1.txt и f.txt , оно будет искать только такие файлы? или как то можно чтобы можно было вводить любой текстовый файл?
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.06.2011, 01:19     Поиск самой длинной строки в файле #6
Цитата Сообщение от Lebovsky Посмотреть сообщение
один вопрос: и в первом коде и во втором написано 1.txt и f.txt , оно будет искать только такие файлы? или как то можно чтобы можно было вводить любой текстовый файл?
в данных вариантах только такие
Lebovsky
1 / 1 / 0
Регистрация: 20.06.2011
Сообщений: 5
21.06.2011, 01:24  [ТС]     Поиск самой длинной строки в файле #7
а как выглядит код введения любого файла? ну или если он намного сложнее то я лучше в самом тексте буду писать ввод нужного файла)
Jupiter
Каратель
Эксперт C++
6543 / 3963 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
21.06.2011, 01:29     Поиск самой длинной строки в файле #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
#include <algorithm>
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
 
int  main()
{
    std::cout << "enter file name: ";
    std::string tmpstr;
    std::cin >> tmpstr;
    std::ifstream ifile(tmpstr.c_str());
    std::vector<std::string> vec_str;
    while(!ifile.eof())
    {
        std::getline(ifile, tmpstr, '\n');
        vec_str.push_back(tmpstr);
    }
    tmpstr = *std::max_element(vec_str.cbegin(), vec_str.cend(), [](const std::string & a, const std::string & b)
    {
        return a.length() < b.length();
    });
    std::cout << tmpstr << '\n';
    std::ofstream ofile("2.txt");
    std::for_each(vec_str.begin(), vec_str.end(), [&ofile, &tmpstr](std::string & str)
    {
        if(str.length() == tmpstr.length() && str != tmpstr)
                std::cout << str << '\n';
        std::reverse(str.begin(), str.end());
        ofile << str << '\n';
    });
    std::getchar();
}
Lebovsky
1 / 1 / 0
Регистрация: 20.06.2011
Сообщений: 5
21.06.2011, 01:34  [ТС]     Поиск самой длинной строки в файле #9
ну теперь я в шоколаде) к экзамену допущен, спасибо)
Lebovsky
1 / 1 / 0
Регистрация: 20.06.2011
Сообщений: 5
24.06.2011, 00:10  [ТС]     Поиск самой длинной строки в файле #10
Опять возникла проблемма.... не загружаются библиотеки алгоритм и вектор как решить эту проблему?
IIIa66uMEM6eP
заставил Бендера
 Аватар для IIIa66uMEM6eP
432 / 288 / 10
Регистрация: 05.12.2010
Сообщений: 1,642
Записей в блоге: 6
24.06.2011, 09:57     Поиск самой длинной строки в файле #11
Lebovsky, скачать, сменить среду, попробовать подключить через .h
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.06.2011, 12:17     Поиск самой длинной строки в файле
Еще ссылки по теме:

C++ Поиск самой длинной строки в const char**
Двумерный массив. Определить номер строки с самой длинной серией одинаковых элементов C++
C++ Функция нахождения самой длинной неубывающей подпослед-ти

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

Или воспользуйтесь поиском по форуму:
xAtom
 Аватар для xAtom
910 / 735 / 60
Регистрация: 09.12.2010
Сообщений: 1,346
Записей в блоге: 1
24.06.2011, 12:17     Поиск самой длинной строки в файле #12
вот держи другой вариант.

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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
#include <stdio.h>
#include <memory.h>
 
 
 
 
 
int  max_line(const char* str) {
        int len = 0, tmp = 0;
        do {
            if( *str == '\n' ||  *str == '\0' ) {
                                      if(len >= tmp) 
                    tmp = len;
                len = 0;
            } else 
                len++;
        } while( *str++ != '\0' );
       return tmp;
}
 
 
 
 
void  line_print(const char*  str, int _max) {
    int  len   = 0;
    do {
        if( *str == '\n' || *str == '\0' ) {
            if(len == _max) {
                int sz  = len;
                str    -= len;
                while(sz--) 
                    printf("%c", *str++);
                       printf("%c", '\n' );
            }
            len = 0;
        } else
                   len++;
    } while( *str++ != '\0' );
}
 
 
 
 
 
 void  main(void){
 
 
           
    FILE*  fp  = fopen("f.txt", "r" );
    fseek(fp, 0L, SEEK_END);
    long  size = ftell(fp);
    fseek(fp, 0L, SEEK_SET);
 
    char*  buffer = new char[size];
    memset(buffer, '\0', (size_t) size);
    if(! buffer)
           exit(1);
    fread(buffer, size, 1u, fp);
    fclose(fp);
 
         
            // узнаём самую длиную строку
            int  b_line = max_line(buffer);
     line_print(buffer, b_line);  // выводим самые длинные строки
 
 
             // запись в файл реверсированых строк
     fp                   = fopen("g.txt", "w");
     const char* str = buffer;
     int len             = 0;
 
     do {
         if(*str == '\n' || *str == '\0' ) {
            int sz = len;
            while(sz--) {
                --str;
                fputc( *str, fp);
            }
                          fputc( '\n' , fp);
                   str += len;
                   len  = 0;
         } else
                  len++;
     } while(*str++ != '\0' );
    
     fflush(fp);
     fclose(fp);
 
 
    delete[] buffer;
    buffer = NULL;
 
       getchar();
}
Yandex
Объявления
24.06.2011, 12:17     Поиск самой длинной строки в файле
Ответ Создать тему
Опции темы

Текущее время: 11:02. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru