tarkoituksena on siis vertailla kahta taulukkoa taulukkoA ja taulukkoB ja näistä poimia yhtenevät arvot eri taulukkoon ja eroavat arvot eri taulukkoon. Toisin sanoen A-taulukosta pitää poistaa ne alkoit mitkä ovat jo B taulukossa.
for(h = 0; h < lkmA; h++){ for (i = 0; i < lkmB; i++) { if (taulukkoA[i] == taulukkoB[j]) { uusiA[uusi_size + n] = taulukkoB[j]; n++; } else { uusiB[m] = taulukkoB[j]; m++; } }//for i }//for h
Ongelmana tässä on se, että uusiB-taulukko kirjoitetaan moneen kertaan kun ensin käydään läpi kaikki i:n arvot ja sitten vasta kasvatetaan h:ta yhdellä ja käydään uudelleen läpi kaikki i:n arvot.
Kopioi arvo taulukkoon uusiB vasta sisemmän silmukan jälkeen. Yksi tapa on määritellä uusi muuttuja, jolle annetaan aina ennen silmukkaa arvo 0. Jos sama arvo on molemmissa taulukoissa, tämä muuttuja saa arvon 1. Silmukan jälkeen arvo kopioidaan toiseen taulukkoon vain, jos muuttujan arvo on edelleen 0 eli arvoa ei löytynyt sillä kerralla.
OK, nyt toimii hienosti.
Kiitos ja kumarrus !
Tuo voisi mennä ehkä näppärämmin, jos taulukot olisivat valmiiksi sortattu.
C++:lla hommaan voisi löytyä ihan valmiit funktiotkin, std::set_difference
ja std::set_intersection
.
Aihe on jo aika vanha, joten et voi enää vastata siihen.