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

Потоки и файлы - C++

Восстановить пароль Регистрация
 
ШурикМартыненко
4 / 4 / 1
Регистрация: 27.03.2013
Сообщений: 110
27.03.2013, 01:44     Потоки и файлы #1
/*Дан текстовый файл f. Переформатировать исходный файл, разделяя его на
строки так, чтобы каждая строка содержала столько символов, сколько
содержит самая короткая строка исходного файла.*/

Дело вот в чем. По лекциям по "алгоритмизации и программированию" мы должны были идти вперёд от практики. По практике мы подошли к этой теме, а лекции не велись толком вообще. Подскажите, пожалуйста, как хоть прыгать?...
Вложения
Тип файла: rar ЛБ 5 АиП.rar (234.8 Кб, 5 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.03.2013, 01:44     Потоки и файлы
Посмотрите здесь:

C++ файлы-потоки
C++ Файлы, потоки...
C++ Файлы и потоки
C++ Файлы. Потоки
C++ потоки и файлы
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ШурикМартыненко
4 / 4 / 1
Регистрация: 27.03.2013
Сообщений: 110
27.03.2013, 01:45  [ТС]     Потоки и файлы #2
Как вывести исходный файл - я разобрался, поэтому и прикрепил файл, а вот как действовать по условию... Не знаю вообще ничего практически
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.03.2013, 07:06     Потоки и файлы #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
54
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
 
int main()
{
    ifstream fin("before.txt");
    if (!fin) cout << "Error!" << endl;
    else
    {
        string min;
        getline(fin, min);
        while (!fin.eof())
        {
            string temp;
            getline(fin, temp);
            if (temp.size() < min.size())
                min = temp;
        }
        fin.clear();
        fin.seekg(0);
        
        int n = min.size();
        cout << n << endl;
 
        string format;
        while (true)
        {
            char ch;
            for (int i = 0; i < n; ++i)
            {
                fin.get(ch);
                if (fin.eof()) break;
                if (ch != '\n') format.push_back(ch);
                else format.push_back(' ');
            }
            if (fin.eof()) break;
            format.push_back('\n');
        }
        fin.close();
        
        cout << format;
 
        ofstream fout("after.txt");
        fout << format;
        fout.close();
    }
 
    cout << endl;
    system("pause");
    return 0;
     
}
ШурикМартыненко
4 / 4 / 1
Регистрация: 27.03.2013
Сообщений: 110
27.03.2013, 08:51  [ТС]     Потоки и файлы #4
Спасибо большое за код)) А пояснить его можете? Ибо наобум щелкать...
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.03.2013, 18:48     Потоки и файлы #5
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
#include <iostream>
#include <string>
#include <fstream>
using namespace std;
 
int main()
{
    ifstream fin("before.txt");
    if (!fin) cout << "Error!" << endl;
    else
    {
        // находим в файле строку с наименьшим количеством символов
        string min;
        getline(fin, min);
        while (!fin.eof())
        {
            string temp;
            getline(fin, temp);
            if (temp.size() < min.size())
                min = temp;
        }
        fin.clear();
        fin.seekg(0);
        
        int n = min.size(); // запоминаем и выводим (необязательно) количество символов в самой короткой строке
        cout << n << endl;
 
        string format; // строка для отформатированных строк
        while (true)
        {
            char ch;
            for (int i = 0; i < n; ++i) // посимвольное чтение из файла n символов в строку format
                                        // символ новой строки ('\n') заменяется пробелом
            {
                fin.get(ch);
                if (fin.eof()) break;
                if (ch != '\n') format.push_back(ch);
                else format.push_back(' ');
            }
            if (fin.eof()) break;
            format.push_back('\n'); // после ввода n символов ставится символ новой строки
        }
        fin.close();
        
        cout << format; // вывод на консоль строки с отформатированными строками
 
        // запись, строки с отформатированными строками, в другой файл (можно в тот же)
        ofstream fout("after.txt");
        fout << format;
        fout.close();
    }
 
    cout << endl;
    system("pause");
    return 0;
     
}
Yandex
Объявления
27.03.2013, 18:48     Потоки и файлы
Ответ Создать тему
Опции темы

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