С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/34: Рейтинг темы: голосов - 34, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 04.04.2017
Сообщений: 23
1

Записать в файл числа из другого файла без повторений

22.05.2019, 11:13. Показов 6373. Ответов 9

Author24 — интернет-сервис помощи студентам
Вот такой получился код. Вносим в файл f числа, заполняем ими массив и выводим их на экран. Выводит верно.
Но дальше полная лажа. Помогите
Не получается вывести в другой файл числа без повторений. В новый файл записываются те же самые числа, да еще и все повторяются по несколько раз.
Я создавала массив для хранения нового набора чисел, но не думаю, что сделала это правильно.
+ Не знаю как реализовать позже вывод нового файла на экран.

Вот мои наработки:

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
#include <iostream>
#include <fstream>
#include <math.h>
#include <string>
using namespace std;
 
int main()
{
    setlocale(LC_CTYPE, "Russian");
    int i = 0, k = 0;
    ofstream outfile; // запись в файл
    outfile.open("f.txt");
    outfile << 1 << " " << 2 << " " << 3 << " " << 2 << " " << 5 << " " << 5 << " " << 2 << " " << 4 << endl;
    int number1[10], number2[10];
    int num; //просмотр содержимого
    ifstream in("f.txt");
    if (in.is_open())
    {
        while (in >> num)
        {
            number1[i] = num;
            cout << number1[i] << " ";
            i++;
        }
        cout << endl;
        for (i = 0; i < 10; i++)
        {
            for (k = 0; k < 10; k++)
            {
                if (number1[i] != number2[k])
                {
                    number2[k] = number1[i];
                }
            }
        }
    }
    outfile.open("g.txt");
    for (k = 0; k < 10; k++)
    {
        outfile << number2[k] << " " << endl;
    }
    system("pause");
}
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
22.05.2019, 11:13
Ответы с готовыми решениями:

Записать в файл только чётные числа из другого файла
Имеется файл, состоящий из N чисел. Создать файл, компонентами которого будут являться только...

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

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

Из текстового файла прочитать четные числа и записать их в другой файл без использования массива (код С++)
Код есть только перед чтением файла нужно его создать, внести 15 чисел и закрыть, через ofstream. ...

9
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
22.05.2019, 11:19 2
Цитата Сообщение от bitochek_yusha Посмотреть сообщение
Я создавала массив для хранения нового набора чисел, но не думаю, что сделала это правильно.
+ Не знаю как реализовать позже вывод нового файла на экран.
Если порядок чисел в втором файле неважен, то здесь проще всего воспользоваться std::set
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <set>
..............
int number1[10], 
std::set<int> number2;
....................
 
        while (in >> num)
        {
            number1[i] = num;
 number2.emplace(num)
            cout << number1[i] << " ";
            i++;
        }
.................................
 
 
    outfile.open("g.txt");
    for (int n: number2)
    {
        outfile << n << " " << endl;
    }
0
Модератор
Эксперт С++
13721 / 10918 / 6478
Регистрация: 18.12.2011
Сообщений: 29,147
22.05.2019, 11:21 3
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
        int j=0;
        for (i = 0; i < 10; i++)
        {
            for (k = 0; k < j; k++)
                 if (number1[i] == number2[k] )
                    break;
            if(k==j)
                 number2[j++] = number1[i];
            }
        }
        outfile.open("g.txt");
        if(outfile)
           for (k = 0; k < j; k++)
              outfile << number2[k] << " " << endl;
0
0 / 0 / 0
Регистрация: 04.04.2017
Сообщений: 23
22.05.2019, 11:30  [ТС] 4
Код по-прежнему не работает. Файл заполняется все так же.
0
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
22.05.2019, 11:38 5
Цитата Сообщение от bitochek_yusha Посмотреть сообщение
Код по-прежнему не работает. Файл заполняется все так же.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
size_t k = 0;
for (size_t i = 0; i < 10; ++i)
{
    bool not_exists = true;
    for (size_t j = 0; i < k; ++j)
        if (number1[i] == number2[j])
        {
            not_exists = false;
            break;
        }
    if (not_exists)
        number2[k++] = number1[i];
}
Добавлено через 57 секунд
Хотя, то же самое, что у zss,
0
0 / 0 / 0
Регистрация: 04.04.2017
Сообщений: 23
22.05.2019, 11:40  [ТС] 6
Как оказалось, файл g вообще не заполняется. И не создается. Проверила на этом коде:
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
#include <iostream>
#include <fstream>
#include <math.h>
#include <set>
using namespace std;
 
int main()
{
    setlocale(LC_CTYPE, "Russian");
    int i = 0, k = 0, j = 0;
    ofstream outfile; // запись в файл
    outfile.open("f.txt");
    outfile << 1 << " " << 2 << " " << 3 << " " << 2 << " " << 5 << " " << 5 << " " << 2 << " " << 4 << endl;
    int number1[10];
    std::set<int> number2;
    int num; //просмотр содержимого
    ifstream in("f.txt");
    if (in.is_open())
    {
        while (in >> num)
        {
            number1[i] = num;
            number2.emplace(num);
            cout << number1[i] << " ";
            i++;
        }
        cout << endl;
    }
    outfile.open("g.txt");
    for (int n : number2)
    {
        outfile << n << " " << endl;
    }
    system("pause");
}
0
698 / 140 / 57
Регистрация: 20.08.2017
Сообщений: 255
22.05.2019, 11:45 7
Лучший ответ Сообщение было отмечено bitochek_yusha как решение

Решение

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
#include <iostream>
#include <fstream>
#include <set>
 
int main()
{
    /* Открываем файл для записи. Если файла не существует, он будет создан. */
    std::fstream fileWithNumbers("input.txt", std::fstream::out);
    if (!fileWithNumbers.is_open())
        return EXIT_FAILURE;
 
    /* Записываем в файл строку с числами. */
    fileWithNumbers << "1 2 3 1 7 4 9 2 3 4 9" << std::endl;
 
    /* Создаем множество (set) целочисленных значений (int). */
    std::set<int> uniqueNumbers;
 
    /* Переоткрываем файл для чтения. */
    fileWithNumbers.close();
    fileWithNumbers.open("input.txt", std::fstream::in);
 
    /* Считываем поочереди каждое число из файла и заносим его во множество. */
    int number;
    while (fileWithNumbers >> number)
        uniqueNumbers.insert(number);
 
    /* Закрываем файл. Он нам больше не нужен. */
    fileWithNumbers.close();
 
    /* Открываем файл, в который будем записывать уникальные числа. */
    std::ofstream fileWithUniqueNumbers("output.txt");
    if (!fileWithUniqueNumbers.is_open())
        return EXIT_FAILURE;
 
    /* Проходим по всем числам во множестве и записываем их в файл. */
    for (auto i : uniqueNumbers)
        fileWithUniqueNumbers << i << ' ';
 
    /* Закрываем файл с уникальными числами. */
    fileWithUniqueNumbers.close();
}
2
6770 / 4564 / 1843
Регистрация: 07.05.2019
Сообщений: 13,726
22.05.2019, 11:51 8
Цитата Сообщение от bitochek_yusha Посмотреть сообщение
Как оказалось, файл g вообще не заполняется. И не создается. Проверила на этом коде:
Потому что ты outfile два раза открываешь
outfile.open("f.txt");
outfile.open("g.txt");
Сделай ещё один ofstream outfile2; outfile2.open("g.txt"); ... outfile2 << n << " " << endl;
0
698 / 140 / 57
Регистрация: 20.08.2017
Сообщений: 255
22.05.2019, 11:55 9
Цитата Сообщение от oleg-m1973 Посмотреть сообщение
Сделай ещё один ofstream outfile2; outfile2.open("g.txt"); ... outfile2 << n << " " << endl;
Или можно просто закрывать файл перед тем как открывать новый:

C++
1
2
outfile.close();
outfile.open("g.txt");
1
0 / 0 / 0
Регистрация: 04.04.2017
Сообщений: 23
22.05.2019, 11:56  [ТС] 10
да, именно в этом моя ошибка. не до конца изучила работу с файлами!
Большое спасибо всем. Разобралась.
0
22.05.2019, 11:56
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2019, 11:56
Помогаю со студенческими работами здесь

Записать в файл f целые числа, потом из файла f записать в файл g нечетные числа
Как правильно написать программу? * Робота с файлами. Нужно записать в файл f целые числа, потом...

В исходный файл переписать все отрицательные числа без повторений
Задан файл целых чисел. В исходный файл переписать все отрицательные числа без повторений, дописать...

Создать новый текстовый файл, содержащий список ip без повторений из исходного файла
Дан текстовый файл со статистикой посещения сайта за неделю. Имеется 10 строк(10 посещений)....

Дан файл, содержащий целые числа. Записать их в другие два файла, при этом в первый записать четные, а во второй нечетные числа.
Дан файл, содержащий целые числа. Записать их в другие два файла, при этом в первый записать...


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

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru