Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 20.10.2014, 13:02   #1
Дизель
Новичок
Джуниор
 
Регистрация: 20.10.2014
Сообщений: 1
Сообщение Работа с файлами в С++

Нужно написать программу которая определит и выведет на экран все совпадающие элементы 3-ох разных файлов.
Я смог сделать только чтения файлов. Как дальше делать понятия не имею.
Помогите пожалуйста, заранее спасибо.
Код:
#include <stdio.h>
#include <iostream>
#include <conio.h>
#include <string.h>
#include <fstream>
using namespace std;
int main()
{
    char nam[10], name[10];
	ifstream input("Base.txt");
	if (!input) exit(1);
	while (!input.eof())
	{
	input>>nam>>name;
	cout<<nam<<""<<name<<endl;
	{
		 char nam[10], name[10];
	     ifstream input("Base_1.txt", ios::in|ios::app);
	     if (!input) exit(1);
	     while (!input.eof())
	{
	input>>nam>>name;
	cout<<nam<<""<<name<<endl;
	{
		 char nam[10], name[10];
	     ifstream input("Base_2.txt", ios::in|ios::app);
	     if (!input) exit(1);
	     while (!input.eof())
	{
	input>>nam>>name;
	cout<<nam<<""<<name<<endl;
	
	}
	input.close();
	getch();
	return 0;
}
	}
}
	}}

Последний раз редактировалось Stilet; 20.10.2014 в 13:26.
Дизель вне форума Ответить с цитированием
Старый 20.10.2014, 13:31   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Значит у меня примеров нет, но я бы вот что порыл: Из инклуда vector использовал бы тип vector. В него считал бы файл. А потом пройдя по векторам поочередности методом (или функцией это надо посмотреть в хелпе) find() определил, если ли в векторах то или иное значение.
Хотя вот есть маленький пример чтения в вектор из файла, посмотри: http://www.programmersforum.ru/showthread.php?t=217501
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 20.10.2014, 14:41   #3
challengerr
Участник клуба
 
Аватар для challengerr
 
Регистрация: 30.07.2008
Сообщений: 1,639
По умолчанию

В файлах что за элементы?
"SPACE.THE FINAL FRONTIER.This's a voyage of starship Enterprise. It's 5-year mission to explore strange new worlds,to seek out new life and civilizations,to boldly go where no man has gone before"
challengerr вне форума Ответить с цитированием
Старый 20.10.2014, 14:51   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Да строковые там скорее всего. Через пробел походу.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 24.10.2014, 01:18   #5
igoreshka3333
Форумчанин
 
Аватар для igoreshka3333
 
Регистрация: 26.09.2014
Сообщений: 176
По умолчанию

Решил вот сделать задачку однако:
Код:
int main(int argc, char* argv[])
{
    if (argc != 4)
    { cerr << "Should be three files!" << endl; exit(1);}
    string firstStr;
    string secondStr;
    string thirdStr;

    ifstream firstFile;
    ifstream secondFile;
    ifstream thirdFile;

    firstFile.open(argv[1]);
    secondFile.open(argv[2]);
    thirdFile.open(argv[3]);

    firstFile.getline(firstStr);
    secondFile.getline(secondStr);
    thirdFile.getline(thirdStr);
компилятору не нравяться эти строки:
Код:
    firstFile.getline(firstStr);
    secondFile.getline(secondStr);
    thirdFile.getline(thirdStr);
А в цикле предупреждает (s имеет тип string):
Код:
for ( int i=0; i<s.size(); i++ )
Почему?
igoreshka3333 вне форума Ответить с цитированием
Старый 24.10.2014, 02:06   #6
abit
Пользователь
 
Регистрация: 21.10.2014
Сообщений: 43
По умолчанию

to igoreshka3333
Цитата:
компилятору не нравяться эти строки:
чего пишет твой компилятор то по этой теме?, вижу, что хотят в getline несколько другое от тебя, чем то, что ты написал...

Цитата:
А в цикле предупреждает (s имеет тип string):
так может пора с
Код:
#include <string.h>/<cstring>
перейти на
Код:
#include <string>
кстати, по стандарту C++ твой цикл должен выглядеть приблизительно так:
Код:
for ( std::size_t i=0; i!=s.size(); ++i )
а ещё лучше так:
Код:
for ( std::string::iterator it=s.begin(); it!=s.end(); ++it )
но это отдельная песня)

Последний раз редактировалось abit; 24.10.2014 в 04:42.
abit вне форума Ответить с цитированием
Старый 24.10.2014, 11:55   #7
8Observer8
Старожил
 
Аватар для 8Observer8
 
Регистрация: 02.01.2011
Сообщений: 3,322
По умолчанию

igoreshka3333, я знаю, что вы работаете в Qt Creator. Там есть такая удобная штука. Вы можете ввести аргументы командной строки. Для этого нажмите на кнопку "Projects" -> выберите вкладку "Run" -> введите аргументы командной строки в текстовом поле "Arguments"



По поводу ошибок вам уже сказали, а я лишь обращу внимание, что нужно вчитываться в сообщения компилятора:

Код:
main.cpp:24: error: no matching function for call to 'std::basic_ifstream<char>::getline(std::string&)'
     firstFile.getline(firstStr);
                                    ^
Компилятор говорит, что нет такой функции getline у которой первый параметр std::string Нагуглите её: getline Видите? У неё первый параметр это объект класса istream. Там и пример есть. Вот так надо:
Код:
getline(firstFile, firstStr);
Файлы нужно всегда проверять на открытие. Так вы убережёте себя и пользователя от поиска ошибки. Трудно искать проблему, когда приложение по непонятным причинам завершается крешем

Пример: http://www.cplusplus.com/reference/f...ifstream/open/

Мой пример:

main.cpp
Код:
#include <iostream>
#include <string>
#include <fstream>
using namespace std;

int main(int argc, char* argv[])
{
    if ( argc != 4 ) {
        cerr << "Error: should be three files." << endl;
        return 1;
    }

    ifstream firstFile;
    ifstream secondFile;
    ifstream thirdFile;

    firstFile.open( argv[1], std::ifstream::in );
    if ( !firstFile.is_open() ) {
        cerr << "Error: unable to open file: " << argv[1] << endl;
        return 1;
    }

    secondFile.open( argv[2], std::ifstream::in );
    if ( !secondFile.is_open() ) {
        cerr << "Error: unable to open file: " << argv[2] << endl;
        return 1;
    }

    thirdFile.open( argv[3], std::ifstream::in );
    if ( !thirdFile.is_open() ) {
        cerr << "Error: unable to open file: " << argv[3] << endl;
        return 1;
    }

    string firstStr;
    string secondStr;
    string thirdStr;

    getline( firstFile, firstStr );
    getline( secondFile, secondStr );
    getline( thirdFile, thirdStr );

    cout << "First string: " << firstStr << endl;
    cout << "Second string: " << secondStr << endl;
    cout << "Third string: " << thirdStr << endl;

    return 0;
}

Последний раз редактировалось 8Observer8; 24.10.2014 в 20:40.
8Observer8 вне форума Ответить с цитированием
Старый 24.10.2014, 19:07   #8
igoreshka3333
Форумчанин
 
Аватар для igoreshka3333
 
Регистрация: 26.09.2014
Сообщений: 176
По умолчанию

Спасибо вам большое за ответы)
igoreshka3333 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлами: запись, добавление, чтение (найти ошибку в коде) / C для начинающих Надо создать программу для работы с файлами Konlor Общие вопросы C/C++ 2 18.05.2014 12:37
работа с файлами dimon198909 Visual C++ 0 16.04.2014 02:47
Работа с файлами C# 803 Помощь студентам 5 03.03.2013 16:30
Работа с файлами. iCaesy Паскаль, Turbo Pascal, PascalABC.NET 1 21.10.2011 17:31
работа с файлами imperceptible4462 Помощь студентам 0 24.10.2010 10:09