472,961 Members | 2,233 Online

# Extracting arrays

How can I extract common elements of two number arrays into another
array?

// the following doesn't work
for(k=0;k<10;k++)
for(l=0;l<15;l++)
if(p[k]==q[l]) {r[m]=p[k];++m;}

Jun 15 '07 #1
7 1802
Umesh <fr****************@gmail.comwrote:
>How can I extract common elements of two number arrays into another
array?

// the following doesn't work
for(k=0;k<10;k++)
for(l=0;l<15;l++)
if(p[k]==q[l]) {r[m]=p[k];++m;}

You need to show us a complete program.

-- Richard

--
"Consideration shall be given to the need for as many as 32 characters
in some alphabets" - X3.4, 1963.
Jun 15 '07 #2
"Umesh" writes:
How can I extract common elements of two number arrays into another
array?

// the following doesn't work
for(k=0;k<10;k++)
for(l=0;l<15;l++)
if(p[k]==q[l]) {r[m]=p[k];++m;}
Congratulations Umesh! You finally figured out that the question belongs in
the message. The code fragment you posted doesn't show any means of starting
m at 0. Does the real code take care of that?
Jun 15 '07 #3
On 15 Jun, 13:55, Umesh <fraternitydispo...@gmail.comwrote:
How can I extract common elements of two number arrays into another
array?

// the following doesn't work
for(k=0;k<10;k++)
for(l=0;l<15;l++)
if(p[k]==q[l]) {r[m]=p[k];++m;}
This code looks OK to me, as long as you set m to zero beforehand and
r is big enough. The one snag I can see is that, if an element occurs
more than once in a list, and at least once in the other, it may be
selected in r more times than you want. One way round that might be to
change the value in p to some sort of non-value (eg you could use 0,
or -1, if this wasn't going to occur in the real data). An alternative
might be to have another array to indicate whether the value in p had
been "used" yet or not. It's up to you.

Hope this helps.
Paul.

Jun 15 '07 #4
gw****@aol.com writes:
On 15 Jun, 13:55, Umesh <fraternitydispo...@gmail.comwrote:
>How can I extract common elements of two number arrays into another
array?

// the following doesn't work
for(k=0;k<10;k++)
for(l=0;l<15;l++)
if(p[k]==q[l]) {r[m]=p[k];++m;}

This code looks OK to me, as long as you set m to zero beforehand and
r is big enough. The one snag I can see is that, if an element occurs
more than once in a list, and at least once in the other, it may be
selected in r more times than you want. One way round that might be to
change the value in p to some sort of non-value (eg you could use 0,
or -1, if this wasn't going to occur in the real data). An alternative
might be to have another array to indicate whether the value in p had
been "used" yet or not. It's up to you.
That "other array" already exists (r). If I were forced to use this
rather inefficient method, I'd write a "membership" function:

int in(int x, int p[], int l)
{
/* Return 1 if x is equal to any element in p[0]..p[l-1]; 0 otherwise */
int k;
for (k = 0; k < l; k++)
if (x == p[k])
return 1;
return 0;
}

and then do something like:

for (k = 0; k < sz1; k++)
if (!in(p[k], r, m) && in(p[k], q, s2))
r[m++] = p[k];

A much better way, is to sort p and q and the do a sort of
"anti-merge". That will be much faster for large arrays.

--
Ben.
Jun 15 '07 #5
Count no. of same elements in an number array and then display the
result.

Jun 16 '07 #6
On Jun 16, 7:34 pm, Umesh <fraternitydispo...@gmail.comwrote:
Count no. of same elements in an number array and then display the
result.
using this code if same number is there in any of the array more than
once,
it will copy again. Is it really needed?

Jun 16 '07 #7
Umesh wrote:
Count no. of same elements in an number array and then display the
result.
I get `17`.

--
Chris "DYOH" Dollin

Hewlett-Packard Limited Cain Road, Bracknell, registered no:
registered office: Berks RG12 1HN 690597 England

Jun 18 '07 #8

This thread has been closed and replies have been disabled. Please start a new discussion.