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

Задан файл f1. Сформировать ф2, разбивая ф1 на строки(разделители - точка или 20 символов) - C++

Восстановить пароль Регистрация
 
Mannoroh666
0 / 0 / 0
Регистрация: 07.06.2016
Сообщений: 3
07.06.2016, 16:47     Задан файл f1. Сформировать ф2, разбивая ф1 на строки(разделители - точка или 20 символов) #1
Задан текстовый файл f1.Сформировать файл f2 из файла f1, разбивая его на строки так, чтобы каждая строка оканчивалась точкой, либо содержала 20 символов, если среди них нет точки.(Использовать функции и меню).
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
#include <iostream>
#include <stdlib.h>
#include <conio.h>
#include <fstream>
#include <io.h>
#include <string.h>
using namespace std;
void proof();
void sozd();
void menu();
char t[200];
string str;
int count,y,m[200],n,k=0,b,i;
 
int main() {
    setlocale(LC_ALL, "rus");
    while(y!=5){
          menu();
          cin >> count;
          switch (count)
          {
             case 1:
             {proof();
             break;
             }
             case 2:
             {sozd();
                 break;
             }
             default:
             cout << "Нео, вы выбрали не ту таблетку!" << endl;
             }
            }
         return 0;
}
void menu(){
    cout << "Сделайте ваш выбор:"<<endl;
          cout<<"1:Выбрать уже существующий файл"<<endl;
          cout<<"2:Использовать вновь создаваемый файл"<<endl;
}
 
//Идеально работает
void sozd(){
    cout<<"Введите текст: ";
    cin.getline(t,200);
    b=strlen(t);
    ofstream F;
            F.open("f1.txt",ios_base::app);
            for (i=0;i<b;i++)
                F<<t[i];
            F.close();
}
 
 
void proof(){
 
    //Тело программы:
    ifstream L("f3.txt");
    ofstream C("f2.txt");
        if (!L.is_open())
                cout << "Файл не может быть открыт!\n";
         else
         {
         for (i=0;i<1;i++)//F3 уже знаем, поэтому знаем и кол-во строк
                    L.getline(t,50);
             for (i=0;i<20;i++)
                         {
                 if (t[i]=='.')      //\0- вместо endl
                     {L.getline(t,i);
                 C<<t[i];
                             }
                 L.getline(t,20);
                 C<<t[20];
             }
                    }
                C.close();
        L.close();
                }
Все никак не получается наладить обработку хотя бы файла ф3 в котором написано:
Рандомный.Текст.Двадцатьпятоедекабря123.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2016, 16:47     Задан файл f1. Сформировать ф2, разбивая ф1 на строки(разделители - точка или 20 символов)
Посмотрите здесь:

C++ Треугольник задан вершинами (x1,y1), (x2,y2), (x3,y3). Принадлежит ли заданная точка (x,y) указанному треугольнику.
C++ Переписать строки в другой файл, в которых имеется более 30 символов
C++ Функция работы со строкой символов,заменить разделители
Дан текстовый файл F. Получить все его строки, содержащие более 60 символов. На С++ C++
C++ Задан файл с отрицательными и положительными целыми числами. Записать в другой файл сначала отрицательные, а потом положительные числа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
nmcf
4257 / 3688 / 1243
Регистрация: 14.04.2014
Сообщений: 14,440
07.06.2016, 17:32     Задан файл f1. Сформировать ф2, разбивая ф1 на строки(разделители - точка или 20 символов) #2
C++
1
2
3
4
5
6
7
8
9
10
11
12
int c, n;
while ((c = L.get()) != EOF)
{
    if (c == '\n') c = ' ';
    C << static_cast<char>(c);
    ++n;
    if ((c == '.' && n <= 20) || n == 20)
    {
        C << endl;
        n = 0;
    }
}
Mannoroh666
0 / 0 / 0
Регистрация: 07.06.2016
Сообщений: 3
07.06.2016, 18:19  [ТС]     Задан файл f1. Сформировать ф2, разбивая ф1 на строки(разделители - точка или 20 символов) #3
Суть идеи я уловил, но как не менял программу на выводе всегда получаю n-ное кол-во повторяющихся символов в ф2. Почему это происходит?
P.S. А зачем нам static_cast?
nmcf
4257 / 3688 / 1243
Регистрация: 14.04.2014
Сообщений: 14,440
07.06.2016, 19:38     Задан файл f1. Сформировать ф2, разбивая ф1 на строки(разделители - точка или 20 символов) #4
У меня же работает. Вот пример, только без файлов:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <sstream>
using namespace std;
 
int main()
{
    istringstream iss("hghhghghgg.gjgjgjdjsieiiaooofpp3334.\nrttt");
    int c, n;
    while ((c = iss.get()) != EOF)
    {
        if (c == '\n') c = ' ';
        cout << static_cast<char>(c);
        ++n;
        if ((c == '.' && n <= 20) || n == 20)
        {
            cout << endl;
            n = 0;
        }
    }
    return 0;
}
Выводит:
Код
hghhghghgg.
gjgjgjdjsieiiaooofpp
3334.
 rttt
Цитата Сообщение от Mannoroh666 Посмотреть сообщение
А зачем нам static_cast?
Чтобы коды вместо символов не выводились.
Mannoroh666
0 / 0 / 0
Регистрация: 07.06.2016
Сообщений: 3
07.06.2016, 23:46  [ТС]     Задан файл f1. Сформировать ф2, разбивая ф1 на строки(разделители - точка или 20 символов) #5
Спасибо за разъяснения! И последний вопрос(возможно, не по теме): почему компиляторы Eclipse и Dev C++ мне выдали просто одну строку, хотя первый попавшийся компилятор в гугле(http://cpp.sh/ с натройками по умолчанию) выдал нормальный результат. И подскажите нормальный компилятор пожалуйста.
nmcf
4257 / 3688 / 1243
Регистрация: 14.04.2014
Сообщений: 14,440
08.06.2016, 08:56     Задан файл f1. Сформировать ф2, разбивая ф1 на строки(разделители - точка или 20 символов) #6
Может, там не в компиляторе дело, а в выводе. Ты скомпилируй полноценное приложение и отдельно от среды запускай.
Visual Studio попробуй.
Yandex
Объявления
08.06.2016, 08:56     Задан файл f1. Сформировать ф2, разбивая ф1 на строки(разделители - точка или 20 символов)
Ответ Создать тему
Опции темы

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