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

В текстовый файл вставить пробелы таким образом, чтобы каждая строка имела длину 80 символов - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 8, средняя оценка - 5.00
DarkStar_54
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 3
19.11.2012, 08:42     В текстовый файл вставить пробелы таким образом, чтобы каждая строка имела длину 80 символов #1
Доброго времени суток!
Прошу помочь мне с одной программкой...ибо она меня уже замучила

"В текстовый файл вставить пробелы таким образом, чтобы каждая строка имела длину 80 символов (пробелы в строке должны быть вставлены равномерно)."

Вообщем все что у меня получилось...это открыть и распознать файл (ну и посчитать кол-во символов, что совсем не надо по заданию), как собственно делать дальше?

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
#include "stdafx.h"
#include <iostream>
#include "windows.h"
#include <string.h>
#include <fstream> 
#include <io.h> 
using namespace std; 
int main()
{
SetConsoleCP(1251); // подключение русского языка
SetConsoleOutputCP(1251);
fstream out("BAZA.txt");  // открытие файла через поток фсрим
fstream in("BAZA.txt");
        char letter;
        long size=0;
        cout <<"Результат работы программы: \n ";
while(! in.eof()) // пока фаил не кончился
{
letter = in.get(); /* записываем в массив содержимое файла посимвольно если символ отличен от пробела выводишь ег она печать*/
if (letter!=EOF)
{
    out<<letter;
    cout<<letter;
    size++;
}
}
in.close();
out.close();
FILE* ft;
ft=fopen("BAZA.txt","r+");  
fclose(ft);
cout <<"\n Кол-во символов: "<<size;
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.11.2012, 08:42     В текстовый файл вставить пробелы таким образом, чтобы каждая строка имела длину 80 символов
Посмотрите здесь:

В матрице M x N переставить строки таким образом, чтобы... C++
C++ Файл: Изменить программу таким образом чтобы ввод исходных данных осуществлялся из файла, результат также должен выводиться в файл
Дан вещественный массив А (n). Отсортировать его таким образом, чтобы C++
В файл вставить пробелы таким образом, чтобы каждая строка имела длину 80 символов C++
C++ Реализовать процедуру таким образом, чтобы она возвращала 2 значения
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Пaтрик
 Аватар для Пaтрик
394 / 387 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
19.11.2012, 08:53     В текстовый файл вставить пробелы таким образом, чтобы каждая строка имела длину 80 символов #2
Цитата Сообщение от DarkStar_54 Посмотреть сообщение
(пробелы в строке должны быть вставлены равномерно)
Что это значит?
DarkStar_54
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 3
19.11.2012, 09:02  [ТС]     В текстовый файл вставить пробелы таким образом, чтобы каждая строка имела длину 80 символов #3
Цитата Сообщение от Пaтрик Посмотреть сообщение
Что это значит?
Это значит, что когда ты будешь добивать строку до 80 символов, что бы все пробелы между словами не оказались между 1ым и 2ым словами.

К примеру: "В_лесу_хорошая_погода" (78 символов строка)
Должно получиться: "В__лесу__хорошая_погода" (2 пробела между В и ЛЕСУ, и так же 2 между ЛЕСУ и ХОРОШАЯ, но 1 между ХОРОШАЯ и ПОГОДА, ибо больше 80 символов нельзя)
А вот так не должно быть: "В___лесу_хорошая_погода"

Как то так вообщем.
Пaтрик
 Аватар для Пaтрик
394 / 387 / 38
Регистрация: 21.01.2012
Сообщений: 972
Завершенные тесты: 1
19.11.2012, 10:00     В текстовый файл вставить пробелы таким образом, чтобы каждая строка имела длину 80 символов #4
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
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
#include <algorithm>
#include <iterator>
#include <sstream>
#include <iomanip>
#include <exception>
 
void func(std::vector<std::string>& lines, std::size_t size = 80)
{
    std::vector<std::string>::size_type count = lines.size();
    std::vector<std::string>::size_type i;
    for (i = 0; i < count; i++)
    {
        if (lines[i].size() > size)
            throw std::runtime_error("All lines in array must be less than size");
        std::istringstream stream(lines[i]);
        std::vector<std::string> words(
            (std::istream_iterator<std::string>(stream)),
            (std::istream_iterator<std::string>()));
        std::size_t total_size = 0;
        for (int i = 0; i < words.size(); i++)
            total_size += words[i].size();
        std::streamsize field_size = (size - total_size) / (words.size() - 1);
        std::ostringstream ostream;
        for (int i = 0; i < words.size() - 1; i++)
            ostream << words[i] << std::string(field_size, ' ');
        if (words.size() > 0)
            ostream << words[words.size() - 1] << std::string((size - total_size) - ((words.size() - 1) * field_size), ' ');
        lines[i] = ostream.str();
    }
}
 
int main()
{
    // Поставил 78 потому что длина командной строки 
    // Windows 80, и дальше не будет видно 
    // что в итоге вышло.
    // Заменишь на свои 80
    // и переделаешь под файлы
    std::vector<std::string> lines;
    lines.push_back("Established in 2002, MyLondonHome are multi award-");
    lines.push_back("winning central London estate and letting agents offering a ");
    lines.push_back("refreshing approach to real estate in central London. Whether ");
    func(lines, 78);
    for (int i = 0; i < lines.size(); i++)
        std::cout << lines[i] << '|' << std::endl;
}
DarkStar_54
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 3
19.11.2012, 13:10  [ТС]     В текстовый файл вставить пробелы таким образом, чтобы каждая строка имела длину 80 символов #5
Спасибо за столь оперативный ответ.
Но не могли бы вы подсказать еще, как их соединить? просто с большинство функций из вашей программы я не работал, и что она делает понимаю только большими кусками.
Yandex
Объявления
19.11.2012, 13:10     В текстовый файл вставить пробелы таким образом, чтобы каждая строка имела длину 80 символов
Ответ Создать тему
Опции темы

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