@dangor266

Как получить по одному разу те символы, которые входят одновременно во все три последовательности?

Моя программа принимает три последовательности, но не может вывести по одному разу общие символы.
Нужно переделать функцию passForCommonSymbols или подсказать алгоритм того, как получить по одному разу те символы, которые входят одновременно во все три последовательности?
Задача:
61c2a03d68e29717803940.png
#include<stdio.h>
#include<locale.h>

template < typename T1, typename T2>
void passForCommonSymbols(T1* Array1, T1* Array2, T1* Array3, T2 size1, T2 size2, T2 size3)
{

	char Array[100] = {0};
	int p = 0;
	
	char simbols;
	for (int i = 1; i < size1; i++)
	{

		for (int j = 1; j < size2; j++)
		{

			if (Array1[i] == Array2[j])
			{
				for (int y = 1; y < size3; y++)
				{
					if (Array2[i] == Array3[y])
					{
						int r = 0;
						while (r < p)
						{
							if (Array3[y] != Array[r])
							{
								
								
								r++;
							}
							if (r == p)
							{
								Array[p] = Array1[i];
							}

						}
						p++;
						
					}
				}
			}
		}
	}
	printf("Общие символы:  %s\n", Array);
}


int main()
{
	setlocale(LC_ALL, "ru");

	int k, m, n;

	printf("Введите размер первой последовательности:\n");
	scanf_s("%i", &k);
	printf("Введите размер второй последовательности:\n");
	scanf_s("%i", &m);
	printf("Введите размер третьей последовательности:\n");
	scanf_s("%i", &n);
	getchar();

	char* s = new char[k];
	char* t = new char[m];
	char* u = new char[n];


	printf("Введите первую последовательность:\n");
	fgets(s, k, stdin);
	printf("Введите вторую последовательность:\n");
	fgets(t, m, stdin);
	printf("Введите третью последовательность:\n");
	fgets(u, n, stdin);

	printf("\n");
	printf("Введенные последовательности:\n\n");
	printf("Первая последовательность: %s\n", s);
	printf("Первая последовательность: %s\n", t);
	printf("Первая последовательность: %s\n", u);


	passForCommonSymbols(s, t, u, k, m, n);

	
	delete[] s;
	delete[] t;
	delete[] u;

}
  • Вопрос задан
  • 142 просмотра
Решения вопроса 1
@galaxy
Например:
1. Построить таблицу всех символов unsigned char sym[256];, заполнить нулями
2. Пройтись по первому массиву: для каждого встреченного символа c установить в таблице sym[c] = 1;
3. Пройтись по второму массиву: для каждого встреченного символа c установить в таблице sym[c] |= 2; (т.е. установить второй бит в 1)
4. Пройтись по третьему массиву: для каждого встреченного символа c установить в таблице sym[c] |= 4; (т.е. установить третий бит в 1)
5. Из таблицы вывести символы со значением 7 (т.е. 1112):
for (size_t c = 0; c < 256; c++)
  if (sym[c] == 7)
    printf("%c", (unsigned char) c);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы