Jak sprawdzić czy tablica B zawiera się w tablicy A w całości bez naruszania kolejności elementów tablicy B?
np dla A={1,2,2,2,3,4,4,4,5,8,10}, B={2,2,3,4,4,}
Tablica B zawsze zawiera się w tablicy B.
Jeśli pytanie było czy B zawiera się w A, to użyj search
z <algorithm>
auto it = search(begin(A), end(A), begin(B), end(B));
Po edycji pytanie dotyczy tylko C, zrobiłbym jakiegoś fora
#define SIZE_A 10
#define SIZE_B 4
bool search(int*a, int*b)
{
for(int i = 0; i < SIZE_A - SIZE_B; ++i)
if(memcmp(a+i, b, sizeof(*a) * SIZE_B) == 0)
return true;
return false
}
Pisane na kolanie, ale powinno działać.
Obecnie mam następujący kod, ale wypisuję elementy które się powtarzają w drugiej tablicy i ilość razy. Chciałbym przyjąć, że tablice są posortowane niemalejąco.
#include <cstdlib>
#include <iostream>
using namespace std;
int tab1[6] = {1,2,3,3,4,5};
int tab2[6] = {2,3,4};
int tab_odp[6];
int main(int argc, char *argv[])
{
for (int i = 0;i<6;i++) tab_odp[i] = 0;
for (int i = 0;i<6;i++)
{
for (int j = 0;j<6;j++)
{
if (tab1[i] == tab2[j])
{
tab_odp[i] += 1;
}
}
}
for (int i = 0;i<6;i++) cout << "Cyfra: " << tab1[i] << "wystepuje w tab2: " << tab_odp[i] << " razy" << endl;
system("PAUSE");
return EXIT_SUCCESS;
}
Tutaj raczej chyba chodzi o jakis szybszy algo niz sma implementacje. Zacznij tak: znadz wielkosc B, sprawdzasz po kolei w A czy pierwszy element pasuje, przechodzisz do ostatniego elementu B i sprawdzasz offset w A czy ma taka sama liczbe, poznej idziesz na drugi element w B i sprawdzasz jego miejsce w A, itd, itd.
Tak się zastanawiam, ale nie wiem czy dobrze myślę, że należy sprawdzić czy druga tablica jest podzbiorem pierwszej. Ale co w sytuacji kiedy:
A = { 1, 2, 3, 2, 5, 6, 2 } B= { 2, 2, 2 }
Wtedy wypada zwrócić informację, że zbiór A nie może zawierać się z B.
To pytanie wymusza sprawdzenie, czy zależność jest możliwa do spełnienia.
coffeina napisał(a):
Ale co w sytuacji kiedy:
A = { 1, 2, 3, 2, 5, 6, 2 } B= { 2, 2, 2 }
A co ma być? Nigdzie nie pisałeś, że kolejność elementów ma znaczenie – B
jest podzbiorem A
.
Napisałem:
tablica B zawiera się w tablicy A w całości bez naruszania kolejności elementów tablicy B?
Ja też nigdzie nie pisałem o naruszaniu zawartości tablicy B
.