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

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

Войти
Регистрация
Восстановить пароль
 
Ксения77777
Сообщений: n/a
#1

дано 2 целочисленных файла, получить пересечение - C++

12.03.2012, 22:34. Просмотров 390. Ответов 3
Метки нет (Все метки)

Дано два целочисленных файла, получить пересечение их элементов, то есть те числа, которые есть одновременно в обоих файлах(в новом файле числа не должны повторяться). Вывести на экран содержимое всех трёх файлов.

помогите пожалуйста)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.03.2012, 22:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос дано 2 целочисленных файла, получить пересечение (C++):

Дано два целочисленных массива, состоящих из неповторяющихся чисел. - C++
Дано два целочисленных массива, состоящих из неповторяющихся чисел. Сформировать новый массив, который содержит элементы первого массива,...

Дано 2 тестовых файла . Получить 3-й который содержит поочередно строки из 2-х файлов - C++
Дано 2 тестовых файла . Получить 3-й который содержит поочередно строки из 2-х файлов

Дано два файла. Получить третий, содержащий поочередно строки исходных двух файлов - C++
Дано два файла. Получить третий, содержащий поочередно строки исходных двух файлов. Надо на dev c++, но я не могу :(

Дано два целочисленных массива Сформировать новый массив, который содержит элементы первого массива, которых нет во втором - C++
Полное условие: Дано два целочисленных массива, состоящих из неповторяющихся чисел. Сформировать новый массив, который содержит элементы...

Ошибка при чтении целочисленных данных из файла - C++
Ребят, выручайте. Нужно прочитать однострочный файл. Из него надо вычленить числа и произвести какую-нибудь арифметическую...

Ввод с клавиатуры массив из пяти целочисленных значений. Вывести их в одну строку через запятую. Получить для массива среднее арифметическое - C++
Введите с клавиатуры в массив пять целочисленных значений. Выведите их в одну строку через запятую. Получите для массива среднее...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
odip
Эксперт С++
7157 / 3297 / 59
Регистрация: 17.06.2009
Сообщений: 14,164
13.03.2012, 07:57 #2
Считать файлы в память
Отсортировать
После этого задача легко решается
0
easybudda
Модератор
Эксперт CЭксперт С++
9627 / 5575 / 947
Регистрация: 25.07.2009
Сообщений: 10,710
13.03.2012, 09:10 #3
Проверки файловых операций, конечно, не хватает, да и вывод файлов не совсем честно сделан (особенно последнего), но думаю - и так запутано получилось...
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
#include <iostream>
#include <fstream>
#include <map>
 
#define IN_FILE_1 "file1.txt"
#define IN_FILE_2 "file2.txt"
#define OUT_FILE "file3.txt"
 
int main(){
    std::map<int, int> map;
    std::map<int, int>::iterator it;
    int number;
    
    std::ifstream fin(IN_FILE_1);
    if ( ! fin.is_open() ){
        std::cerr << "Can't open " << IN_FILE_1 << " for input!" << std::endl;
        return 1;
    }
    
    std::cout << IN_FILE_1 << ":" << std::endl;
    while ( fin >> number ){
        std::cout << number << " ";
        map[number] = 0;
    }
    std::cout << std::endl;
    fin.close();
    
    fin.open(IN_FILE_2);
    if ( ! fin.is_open() ){
        std::cerr << "Can't open " << IN_FILE_2 << " for input!" << std::endl;
        return 1;
    }
    std::cout << IN_FILE_2 << ":" << std::endl;
    while ( fin >> number ){
        std::cout << number << " ";
        if ( ( it = map.find(number) ) != map.end() )
            it->second = 1;
    }
    std::cout << std::endl;
    fin.close();
    
    std::ofstream fout(OUT_FILE);
    if ( ! fout.is_open() ){
        std::cerr << "Can't open " << OUT_FILE << " for output!" << std::endl;
        return 1;
    }
    std::cout << OUT_FILE << ":" << std::endl;
    for ( it = map.begin(); it != map.end(); ++it ){
        if ( it->second ){
            std::cout << it->first << " ";
            fout << it->first << " ";
        }
    }
    fout.close();
    std::cout << std::endl;
    
    return 0;
}
Код
$ ./intersection 
file1.txt:
22 11 13 43 26 91 88 
file2.txt:
40 33 11 89 13 26 69 57 
file3.txt:
11 13 26
file1.txt и file2.txt нужно создать прежде, чем запускать программу.
0
Петррр
5957 / 3394 / 337
Регистрация: 28.10.2010
Сообщений: 5,926
13.03.2012, 10:26 #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
#include <iostream>
#include <iterator>
#include <algorithm>
#include <fstream>
#include <string>
#include <vector>
 
int main()
{
    std::string fileName1 = "file1.txt";
    std::string fileName2 = "file2.txt";
    std::ifstream file1(fileName1.c_str());
    std::ifstream file2(fileName2.c_str());
    std::vector<int> vec1((std::istream_iterator<int>(file1)), 
                          std::istream_iterator<int>());
    std::vector<int> vec2((std::istream_iterator<int>(file2)), 
                          std::istream_iterator<int>());
    std::cout << "File one: " << std::endl;
    std::copy(vec1.begin(), vec1.end(), std::ostream_iterator<int>(std::cout, " "));
    std::cout << std::endl << "File two: " << std::endl;
    std::copy(vec2.begin(), vec2.end(), std::ostream_iterator<int>(std::cout, " "));
    std::sort(vec1.begin(), vec1.end());
    std::sort(vec2.begin(), vec2.end());
    std::vector<int> intersect;
    std::set_intersection(vec1.begin(), vec1.end(), 
                          vec2.begin(), vec2.end(),
                          back_inserter(intersect));
    std::cout << std::endl << "Intersection: " << std::endl;
    std::copy(intersect.begin(), intersect.end(), 
              std::ostream_iterator<int>(std::cout, " "));
    file1.close();
    file2.close();
    return 0;
}
1
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.03.2012, 10:26
Привет! Вот еще темы с ответами:

Пересечение двух прямых и проверка на пересечение - C++
Доброго времени суток слизал функцию проверки отсюда:/segments_intersection_checking на всякий случай у меня она выглядит так: int...

Дано натуральное п (n 3). Получить vn. - C++
Пусть u1=u2=0; v1=v2=1; ui=(ui-1 – ui-2vi-1 – vi-2)/(1+u2i-1+v2i-1); vi=(ui-1 – vi-1)/(ui-2+vi-1 +2), i=3, 4, … Дано натуральное п...

Дано имя файла целых чисел. Найти количество элементов, содержащихся в данном файле. Если файла с таким именем не существует, то вывести –1 - C++
Дано имя файла целых чисел. Найти количество элементов, содержащихся в данном файле. Если файла с таким именем не существует, то вывести...

Дано действительное число у. Получить - C++
Дано действительное число у. Получить (1.7t(0.25)+2t(1+y))/(6-t(y*y-1), где t(x)=Ʃ(от k=0 до 10)(x^(2k+1)/(2k+1)!)/Ʃ(от k=0 до...


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

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

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