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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Mannoroh666
0 / 0 / 0
Регистрация: 07.06.2016
Сообщений: 3
#1

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

07.06.2016, 16:47. Просмотров 184. Ответов 5
Метки нет (Все метки)

Задан текстовый файл 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.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.06.2016, 16:47
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Задан файл f1. Сформировать ф2, разбивая ф1 на строки(разделители - точка или 20 символов) (C++):

Сформировать на основе внешнего текстового файла Т1 файл Т2, разбивая Т1 на строки - Free Pascal
.Разработать программу, которая формирует на основе внешнего текстового файла Т1 файл Т2, разбивая Т1 на строки так, чтобы каждая строка...

Дана строка символов, признак конца строки – точка. Сформировать множество не повторяющихся гласных символов - Free Pascal
Дана строка символов, признак конца строки – точка. Сформировать множество не повторяющихся гласных символов.

Текстовый файл. Сформировать новый файл, исключив строки, длина которых превышает 50 символов - Pascal ABC
Дан текстовый файл. Сформировать новый файл, исключив из него строки, длина которых превышает 50 символов. ЕСЛИ можно подправить незнаю...

Задан текстовый файл, необходимо по нему сформировать двоичный файл индексов - C++
Нужна помощь! Задача: Задан текстовый файл, необходимо по нему сформировать двоичный файл индексов (смещений начал строк в текстовом...

Переписать в файл те строки, которые заканчиваются символом пробел,тире, запятая или точка - Turbo Pascal
Задан текстовый файл.Нужно переписать в исходящий файл те рядки,которые заканчиваются символом пробел,тире, запятая или точка.

Даны три строки символов. Сформировать четвёртую строку по правилу: она должна состоять из последнего символа первой строки, трёх первых символов втор - Delphi
Я не знаю как написать эти две программы 1.Даны три строки символов. Сформировать четвёртую строку по правилу: она должна состоять из...

5
nmcf
5324 / 4644 / 1553
Регистрация: 14.04.2014
Сообщений: 18,479
07.06.2016, 17:32 #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;
    }
}
0
Mannoroh666
0 / 0 / 0
Регистрация: 07.06.2016
Сообщений: 3
07.06.2016, 18:19  [ТС] #3
Суть идеи я уловил, но как не менял программу на выводе всегда получаю n-ное кол-во повторяющихся символов в ф2. Почему это происходит?
P.S. А зачем нам static_cast?
0
nmcf
5324 / 4644 / 1553
Регистрация: 14.04.2014
Сообщений: 18,479
07.06.2016, 19:38 #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?
Чтобы коды вместо символов не выводились.
0
Mannoroh666
0 / 0 / 0
Регистрация: 07.06.2016
Сообщений: 3
07.06.2016, 23:46  [ТС] #5
Спасибо за разъяснения! И последний вопрос(возможно, не по теме): почему компиляторы Eclipse и Dev C++ мне выдали просто одну строку, хотя первый попавшийся компилятор в гугле(http://cpp.sh/ с натройками по умолчанию) выдал нормальный результат. И подскажите нормальный компилятор пожалуйста.
0
nmcf
5324 / 4644 / 1553
Регистрация: 14.04.2014
Сообщений: 18,479
08.06.2016, 08:56 #6
Может, там не в компиляторе дело, а в выводе. Ты скомпилируй полноценное приложение и отдельно от среды запускай.
Visual Studio попробуй.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.06.2016, 08:56
Привет! Вот еще темы с ответами:

Сформировать новую строку содержащую N1 первых символов строки S1 и N2 символов строки S2 - Pascal ABC
Даны целые положительные числа N1 и N2 и строки S1 и S2. Получить из этих строк новую строку содержащую первые N1 символов строки S1 и...

Задан треугольник с точкой, надо узнать, лежит ли точка в треугольнике или нет. Написать на делфи... - Delphi
Лежит ли точка M(Xm,Ym) внутри треугольника, заданного координатами своих вершин A(Xa,Ya), B(Xb,Yb), C(Xc,Yc) на плоскости? Люди помогите с...

Задан текстовый файл, где записаны имена людей и время: сформировать из них очередь - C (СИ)
Задан текстовый файл там дано имена людей и время и сформировать надо из них очередь.Но почему то у меня не хочет считывать имена ...

Из символов введенной строки сформировать две строки - из цифр и букв. - C#
Здравствуйте, помогите пожалуйста решить задачу надо Из символов введенной строки сформировать две строки - из цифр и букв.в С#


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

Или воспользуйтесь поиском по форуму:
6
Yandex
Объявления
08.06.2016, 08:56
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru