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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 24.01.2011, 09:48   #1
Matfeya
Новичок
Джуниор
 
Регистрация: 24.01.2011
Сообщений: 2
По умолчанию Строки, сравнение, чтение из файла

Имеется файл .тхт с содержанием примерно следующего вида:

Код HTML:
192.168.0.1 www.allposters.com
192.168.0.2 www.debian.org
192.168.0.3 www.lostfilm.tv

Задача такая: вводим с клавиатуры айпи - показывает соответствующий домен и наоборот.

Ума хватило только на такой вариант, когда файл содержит только одну строчку

Код:
void main() 

{
	FILE* f=fopen("File.txt","r");
	char input[255];
	char dns[255];
	char ip[255];
	int i;
	while (!feof(f))
	{
		fscanf(f,"%s %s",&ip,&dns);
		
	}
	
	scanf("%s", &input);
	if(strcmp(input,ip)==0 || strcmp(input,dns)==0)	
		i=strcmp(input,ip);
	else 
		
	{
		printf("Not found");
		getch();
		return;
	}
		if (i==0)	
			printf("%s", dns);
		else
			printf("%s", ip);

	getch();
	
}
Поможете, чтобы работало с несколькими?
Matfeya вне форума Ответить с цитированием
Старый 24.01.2011, 23:07   #2
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию

вот код, 1 минута писанины и тестирования, правда один минус, массивы строк отграничены, всего 1000 записей, но это дело исправимо если создать динамические массивы
Код:
int main(int argc, char* argv[])
{
string EnterIp;
string FileIp[1000],DomainName[1000];
        ifstream OpenFileBase("ip.txt");
                if(!OpenFileBase){cout<<"\n ERROR IN FILE ";system("pause");exit(1);}
                     for(int i=0;i<1000;i++){
                        OpenFileBase>>FileIp[i];
                        OpenFileBase>>DomainName[i];
                     }
EnterIp="";
        while(EnterIp!="exit")
        {
                cout<<"\n Enter ip: ";cin>>EnterIp;
                        for(int i=0;i<1000;i++)
                        {
                                if(FileIp[i]==EnterIp){
                                        cout<<"\n Domain: "<<DomainName[i];
                                }
                        }
        }
        return 0;
}
CodeNOT вне форума Ответить с цитированием
Старый 24.01.2011, 23:08   #3
CodeNOT
Форумчанин
 
Аватар для CodeNOT
 
Регистрация: 08.11.2010
Сообщений: 593
По умолчанию

вот код, 1 минута писанины и тестирования, правда один минус, массивы строк отграничены, всего 1000 записей, но это дело исправимо если создать динамические массивы
Код:
int main(int argc, char* argv[])
{
string EnterIp;
string FileIp[1000],DomainName[1000];
        ifstream OpenFileBase("ip.txt");
                if(!OpenFileBase){cout<<"\n ERROR IN FILE ";system("pause");exit(1);}
                     for(int i=0;i<1000;i++){
                        OpenFileBase>>FileIp[i];
                        OpenFileBase>>DomainName[i];
                     }
EnterIp="";
        while(EnterIp!="exit")
        {
                cout<<"\n Enter ip: ";cin>>EnterIp;
                        for(int i=0;i<1000;i++)
                        {
                                if(FileIp[i]==EnterIp){
                                        cout<<"\n Domain: "<<DomainName[i];
                                }
                        }
        }
        return 0;
}
CodeNOT вне форума Ответить с цитированием
Старый 25.01.2011, 15:36   #4
Matfeya
Новичок
Джуниор
 
Регистрация: 24.01.2011
Сообщений: 2
По умолчанию

Спасибо большое!
Matfeya вне форума Ответить с цитированием
Старый 25.01.2011, 15:57   #5
dn.xmk
Новичок
Джуниор
 
Регистрация: 25.01.2011
Сообщений: 10
По умолчанию

Matfeya, ты сначала "запомни" введеную пользователем строку, а потом в цикле
while (!feof(f)) после того как считал строку из файла - сравнивай &input и &ip . Если они равны - прерывай цикл (break). И выводи на экран строки &input и &dns

Последний раз редактировалось dn.xmk; 25.01.2011 в 16:06.
dn.xmk вне форума Ответить с цитированием
Старый 25.01.2011, 16:53   #6
pproger
C++ hater
СтарожилДжуниор
 
Аватар для pproger
 
Регистрация: 19.07.2009
Сообщений: 3,336
По умолчанию

2CodeNOT
массивы то зачем?

Код:
#include <iostream>
#include <fstream>
#include <string>
#include <iterator>

using namespace std;

int main()
{
	string ip;
	ifstream f("text.txt");
	istream_iterator<string> ret, eof;
	cout << "Input Ip: ";
	cin >> ip;
	ret = find_if(istream_iterator<string>(f), eof, bind1st(equal_to<string>(), ip));
	cout << (ret != eof ? *++ret : "Ip not found") << endl;
	return 0;
}
Код:
int main(int argc, char *argv[])
{
	ifstream f("text.txt");
	cout << (find_if(istream_iterator<string>(f), istream_iterator<string>(), bind1st(equal_to<string>(), string(argv[1]))) != istream_iterator<string>()
		? *istream_iterator<string>(f) : "Ip not found") << endl;

	return 0;
}
от жеж благодать то.... принимал бы istream_iterator константную ссылку, можно былоб в 1 строчку забоянить
и как теперь с этим жить....
I invented the term Object-Oriented, and I can tell you I did not have C++ in mind. (c)Alan Kay

My other car is cdr.

Q: Whats the object-oriented way to become wealthy?
A: Inheritance

Последний раз редактировалось pproger; 25.01.2011 в 17:28.
pproger вне форума Ответить с цитированием
Ответ


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

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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
сравнение размера файла в интернете с размером файла на компьютере Excellion Общие вопросы Delphi 19 09.01.2011 17:33
чтение определенной строки из файла. Serjuk Общие вопросы C/C++ 12 22.05.2010 13:46
Чтение строки из файла kroŧ Общие вопросы Delphi 4 14.05.2010 15:42
Сравнение строки Lifefine Помощь студентам 3 07.03.2010 01:37
чтение файлов и сравнение с условиями Neymexa Общие вопросы .NET 2 14.04.2009 19:05