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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.03.2010, 19:31   #1
danslash
Новичок
Джуниор
 
Регистрация: 27.03.2010
Сообщений: 3
По умолчанию C++ поиск повторяющихся (строковых) элементов в массиве

Друзья помогите пожалуйста встала такая задача.
Есть 3 файла со строчками нужно найти и вывести строчки которые повторяються и вывести сколько раз.
Сделал 2 файла. Считал с них инфу в массив, а вот дальще застрял. Помогите плиззз...
Заранее огромное спс...
Код:
int main()
{
	Line* values = NULL;
	unsigned int lines = 1;
	unsigned int lines1 = 1;

	ifstream InFile("input.txt");
	ifstream InFile1("input1.txt");

	if(!InFile) {
		cerr << "Error, while opening file! Exit." << endl;
		exit(1);
	}
	
	if(!InFile1) {
		cerr << "Error, while opening file! Exit." << endl;
		getch();
		exit(1);
	}

	while(!InFile.eof()) {
		if(InFile.get() == '\n')
			lines++;
	}
							cout << lines << endl;
	while(!InFile1.eof()) {
		if(InFile1.get() == '\n')
			lines1++;
	}
						cout << lines1 << endl;
	InFile1.clear();
	InFile1.seekg(ios::beg);
	InFile.clear();
	InFile.seekg(ios::beg);


	values = new Line[lines];
	memset(values, 0, sizeof(Line)*lines);

	for(unsigned int i = 0; i < lines; i++) {
		InFile >> values[i].name;
	}
	for(unsigned int i = lines; i <lines+lines1 ; i++) {
		InFile1 >> values[i].name;
	}

	//delete[] values;
	InFile.close();
	int kol=0;
			for(unsigned int i = 0; i < lines+lines1; i++) {
							for(unsigned int j = i; j < lines+lines1; j++) {
								if(values[i].name==values[j].name)
								{
									kol=kol+1;
								}
							//cout << values[j].name << endl;
							}
					cout << values[i].name << endl;
					}
cout<<kol<<endl;
getch();
	return 0;

}
danslash вне форума Ответить с цитированием
Старый 28.03.2010, 06:54   #2
Познающий
Форумчанин
 
Аватар для Познающий
 
Регистрация: 09.05.2009
Сообщений: 162
По умолчанию

былин ну я даже не знаю.
раз строчки значит у нас массив указателей на массивы символов. так?
еслинет не бейте =)
таквот... я бы (подчеркиваю - я бы) сделал массив (инт), размер которого равен числу строк,и значит заполняем массив размерами строк

ну ты понял а[0]=strlen (первая строка) и т д

Потом сделал бы перебор подряд на поиск равенств, допустим я обнаружил, что a[0]=a[4]=a[7] то есть эти строки равной длины. Дальше интереснее - сравнить а[0] с a[4] и a[7] ПОСИМВОЛЬНО (!), затем a[4] с a[0] и a[7] ну про а7 ты понял...

И если операция strcmp даст где-то единичку - значит строки равны. а там делай что хочешь - запоминай индексы, выводи на экран - не суть.

Я уж думаю задание типа определить, сколько раз повторяется 3 в массиве ЁКЛМН для вас не сложно =) в этом и заключается дальнейшая работа...

ЗЫ это все имхо я тоже студент
ЗЗЫ есть вероятность что я неправильно понял
С наилучшими пожеланиями.
Познающий вне форума Ответить с цитированием
Старый 28.03.2010, 06:54   #3
Познающий
Форумчанин
 
Аватар для Познающий
 
Регистрация: 09.05.2009
Сообщений: 162
По умолчанию

былин а вопросик запылился...
С наилучшими пожеланиями.
Познающий вне форума Ответить с цитированием
Старый 28.03.2010, 09:47   #4
danslash
Новичок
Джуниор
 
Регистрация: 27.03.2010
Сообщений: 3
По умолчанию

Цитата:
Сообщение от Познающий Посмотреть сообщение
былин а вопросик запылился...
Действительно запылился . Со строками в С проблемка получается. Так то вроде тривиальная задача, если бы были числа.
А мне переводить смысла нету используя strlen. У меня строки равны 9 знакам, +1(\0). Потому что все они равны. А вот сравнить именно строки не получается.
danslash вне форума Ответить с цитированием
Старый 28.03.2010, 10:42   #5
Познающий
Форумчанин
 
Аватар для Познающий
 
Регистрация: 09.05.2009
Сообщений: 162
По умолчанию

а че там не получаться? во первых я не вижу С, но С++. Со стрингами не работал, предпочитаю чар*, а коль чар* то точно можно тупо сравнить строки аля декартово произведение. функция strcmp бибилиотека string. Почему нельзя этим воспользоваться?
С наилучшими пожеланиями.
Познающий вне форума Ответить с цитированием
Старый 29.03.2010, 01:35   #6
danslash
Новичок
Джуниор
 
Регистрация: 27.03.2010
Сообщений: 3
По умолчанию

Код:
int main()
{
	string s;
	vector<string> test;
	vector<string> test1;

	ifstream in("input.txt");

	for(;in>>s;)
		test.push_back(s);
	//cout<<test[0];


	for (vector<string>::iterator cur=test.begin();cur!=test.end();++cur)
		cout<<*cur<<' ';
	cout<<endl;

	for(int j = 0;j<test.size();++j)
	{
		for(int i = 0;i<test.size();++i)
		{
			if(test[i] == test[j] && i!=j)
			{
				test.erase(test.begin() + i);
			}
		}
	}

//	sort(test.begin() , test.end());
//	unique(test.begin() , test.end());

	for (vector<string>::iterator cur=test.begin();cur!=test.end();++cur)
		cout<<*cur<<' ';

	cout<<endl;
	getch();
	return 0;
}
Люди... ну подскажите хотя бы как мне вырезанные строки с вектора (красным выделенно)занести в массив или другой вектор
danslash вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск повторяющихся элементов в матрице I_newbie Помощь студентам 2 15.03.2010 22:44
количество повторяющихся элементов в массиве Андрей.12 Помощь студентам 1 28.01.2010 23:57
ДЭЛФИ 2 задачи для зачета(поиск элементов в массиве) Archetype Помощь студентам 12 10.12.2009 18:18
В массиве A, состоящем из 10 элементов, подсчитать количество положительных элементов Alex61 Помощь студентам 5 16.05.2009 23:06
В одномерном массиве, состоящем из n вещественных элементов, вычислить сумму элементов массива HazelHen Общие вопросы C/C++ 2 29.03.2009 15:16