0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 3
1

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

19.11.2012, 08:42. Показов 2323. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброго времени суток!
Прошу помочь мне с одной программкой...ибо она меня уже замучила

"В текстовый файл вставить пробелы таким образом, чтобы каждая строка имела длину 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;
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.11.2012, 08:42
Ответы с готовыми решениями:

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

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

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

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

5
442 / 410 / 132
Регистрация: 21.01.2012
Сообщений: 974
19.11.2012, 08:53 2
Цитата Сообщение от DarkStar_54 Посмотреть сообщение
(пробелы в строке должны быть вставлены равномерно)
Что это значит?
0
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 3
19.11.2012, 09:02  [ТС] 3
Цитата Сообщение от Пaтрик Посмотреть сообщение
Что это значит?
Это значит, что когда ты будешь добивать строку до 80 символов, что бы все пробелы между словами не оказались между 1ым и 2ым словами.

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

Как то так вообщем.
0
442 / 410 / 132
Регистрация: 21.01.2012
Сообщений: 974
19.11.2012, 10:00 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;
}
0
0 / 0 / 0
Регистрация: 19.11.2012
Сообщений: 3
19.11.2012, 13:10  [ТС] 5
Спасибо за столь оперативный ответ.
Но не могли бы вы подсказать еще, как их соединить? просто с большинство функций из вашей программы я не работал, и что она делает понимаю только большими кусками.
0
279 / 39 / 13
Регистрация: 11.10.2015
Сообщений: 405
19.05.2017, 20:47 6
Пaтрик, падает, если в строке одно слово
0
19.05.2017, 20:47
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.05.2017, 20:47
Помогаю со студенческими работами здесь

В текстовый файл вставить пробелы, что бы количество символов равнялось 80, взяв строки из другого файла
Доброго времени суток! Очень нужна помощь в немного странной задаче. В текстовый файл нужно...

В тексте из N строк выровнять строки так, чтобы каждая строка имела длину 65 символов
выравнивание строк:в тексте из N строк выровнять строки так,чтобы каждая строка имела длину 65...

Переписать один файл в другой, чтобы были удалены лишние пробелы и каждая строка содержала ровно 20 символов
Дан текстовый файл f. Переписать его содержимое в файл g таким образом, чтобы в нем были удалены...

Дана строка символов. Изменить ее таким образом, чтобы все символы отделялись друг от друга одним пробелом
Дана строка символов. Изменить ее таким образом, чтобы все символы отделялись друг от друга одним...


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

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

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