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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 02.05.2017, 17:33   #1
LLIePcT9IHou_EHoT
 
Регистрация: 21.10.2016
Сообщений: 4
По умолчанию Вывод одинаковых слов из массивов

Здравствуйте! Накодил чутка, прога делает все что нужно И выводит все слова, встречающиется в 2х массивах. При этом нельзя было юзать функции для работы со строками (по заданию). Ломал голову, как заставить ее выводить слова, встречающиеся в обоих массивах символов. Так и не надумал( помогите если вам не сложно) будет крайне приятно)

Код:
#include <stdio.h> 
#include <iostream>
#include <stdlib.h>
#include <cstring>
#include <conio.h>

const int M = 2, N = 10; 

using namespace std;

void inic (char mass[][N], int M, int N){
	for (int i = 0; i < M; i++){
		for (int j = 0; j < N; j++){
			mass[i][j] = ' ';
		}
	}	
}

void vvod (char mass[][N], int M, int N){
	char ch;
	int i = 0, j = 0;
	do{
		scanf("%c", &ch);
		if(i < M && j < N){
			mass[i][j] = ch;
			j++;
			if (j >= N){
				j = 0;
				i++;
			}
		}
	}
	while(ch != '\n');
	i = 0;
	j = 0;	
}

void print (char mass[][N], int M, int N){
	for (int i = 0; i < M; i++){
		for (int j = 0; j < N; j++){
			cout << mass[i][j];
		}
		cout << endl;
	}		
}


int main () {
	setlocale (LC_ALL, "Russian");
	char mass1[M][N], mass2[M][N]; 
	
	cout << "Лаб7 Двумерные массивы символов" << endl;
////////////////////////////////////////////////////////////////////////////////////
//Инициализация элементов массива пробелами
	inic (mass1, M, N);
	inic (mass2, M, N);
////////////////////////////////////////////////////////////////////////////////////
//Ввод элементов массива	
	cout << "Введите строку элементов 1-го массива: ";
	vvod (mass1, M, N);
	cout << "Введите строку элементов 2-го массива: ";	
	vvod (mass2, M, N);
////////////////////////////////////////////////////////////////////////////////////
//вывод массивов на экран 	
	system("cls");	
	cout << "\n\nПервый массив\n";
	print (mass1, M, N);
	cout << "\n\nВторой массив\n";
	print (mass2, M, N);	
////////////////////////////////////////////////////////////////////////////////////
//поиск слов	
	cout << "\nСлова, встречающиеся в двух массивах: ";
	bool inw = false;
	char sliyanie[40];
	int z = 0;
	cout << "!!!" << sliyanie;
	cout << endl;
	for(int z1=0; z1<(40); z1++){
		sliyanie[z1] = ' ';
	}
	cout << "!!!" << sliyanie;	
		cout << endl;
	for (int i = 0; i < M; i++){
		for (int j = 0; j < N; j++){
			if (mass1[i][j] != ' '){
				sliyanie[z] = mass1[i][j];
				z++;
				inw = true;
			}
			else{
				if (inw == true){
					sliyanie[z] = ' ';
					z++;
				} 
				inw = false;
			}
		}
	}
	cout << "!!!" << sliyanie << "/";
		cout << endl;
	sliyanie[z] = ' ';
	z++;
	cout << "!!!" << sliyanie << "/";
		cout << endl;
	inw = false;
	for (int i = 0; i < M; i++){
		for (int j = 0; j < N; j++){
			if (mass2[i][j] != ' '){
				sliyanie[z] = mass2[i][j];
				z++;
				inw = true;
			}
			else{
				if (inw == true){
					sliyanie[z] = ' ';
					z++;
				} 
				inw = false;
			}
		}
	} 
	cout << sliyanie;

	getchar ();
	return 0;	
}

Последний раз редактировалось LLIePcT9IHou_EHoT; 02.05.2017 в 17:36.
LLIePcT9IHou_EHoT вне форума Ответить с цитированием
Старый 02.05.2017, 18:39   #2
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

Сделай так, чтобы можно было посимвольно сравнивать каждое слово перебором. Первое слово первого массива с каждым второго массива, и т.д.

Последний раз редактировалось KAMLS; 02.05.2017 в 18:47.
KAMLS вне форума Ответить с цитированием
Старый 02.05.2017, 18:52   #3
LLIePcT9IHou_EHoT
 
Регистрация: 21.10.2016
Сообщений: 4
По умолчанию

Цитата:
Сообщение от KAMLS Посмотреть сообщение
Сделай так, чтобы можно было посимвольно сравнивать каждое слово перебором. Первое слово первого массива с каждым второго массива, и т.д.
мою глупую головушку посещала эта идея. Я не смог в ее реализацию((
LLIePcT9IHou_EHoT вне форума Ответить с цитированием
Старый 02.05.2017, 18:56   #4
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

В общем тоже не знаю. Но по логике, надо придумать как идентифицировать слова при вводе, чтобы потом по этим меткам искать. Скорее это функция getche участвует. Ты вводишь слова, отождествляешь с цифрой, а потом по массе находишь.
KAMLS вне форума Ответить с цитированием
Старый 04.05.2017, 12:23   #5
b2soft
Упртй программер
Форумчанин
 
Регистрация: 26.11.2009
Сообщений: 150
По умолчанию

Цитата:
Сообщение от KAMLS Посмотреть сообщение
В общем тоже не знаю. Но по логике, надо придумать как идентифицировать слова при вводе, чтобы потом по этим меткам искать. Скорее это функция getche участвует. Ты вводишь слова, отождествляешь с цифрой, а потом по массе находишь.
Не обязательно. Отождествлять с цифрой - это по сути написать свой сэт (значение - слово, а хранение в std::set обычно реализовано через дерево поиска)

Задача по смыслу: найти пересечение двух множеств. Если использовать std::set, то такую операцию можно сделать методом std::set_intersection. Слияние для std::set также определено. Однако, я так понимаю, по заданию нужно использовать массивы.

Самое простое, что приходит на ум:
1. Записываем слова в два массива;
2. Пишем функцию-компаратор, который принимает два слова и возвращает true, если слова одинаковы, false - если нет (то есть свою реализацию strcmp/std::string:perator=);
3. Двойным циклом сравниваем при помощи функции из шага 2 каждое слово первого массива со всеми словами второго массива. Если слова равны - выводим на экран.
Помощь с кодом/лабами по С/С++
Контакты: ICQ 623334555 Skype: btwosoft; Mail: b2soft@yandex.ru
b2soft вне форума Ответить с цитированием
Старый 04.05.2017, 17:09   #6
KAMLS
Форумчанин
 
Регистрация: 09.04.2017
Сообщений: 598
По умолчанию

наверное!)) Я вообще, только перегрузку операций изучать начал по Лафоре))
KAMLS вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Язык JavaScript, вывод слов состоящие из одинаковых букв, помощь Svyatoslav359 JavaScript, Ajax 2 05.06.2015 17:38
Кол-во одинаковых слов в предложении rafffkaaa Microsoft Office Excel 1 17.04.2014 21:13
Поиск одинаковых слов в строках. zink Паскаль, Turbo Pascal, PascalABC.NET 6 01.11.2011 10:00
удаление одинаковых слов (С/С++) jewel Помощь студентам 1 12.12.2008 15:14
Поиск одинаковых слов (Delphi 7) hooch Помощь студентам 4 27.11.2008 20:14