how to remove zeros from int array? for ex if i have a array 1,2,0,34 than result is 1,2,34.
i was thinking may be use trim function?
another idea was to put space. for ex 1,0,2,0,3 than reslust is 1, ,2, ,3

note iam trying to do this without making another array.

``````int a[5];  //has the value 0,1,0,3

for(i = 0; i < 5; i++)
{
if(a[j] == 0)
a[i] = ' '?
}
``````
6
Contributors
19
Replies
29
Views
6 Years
Discussion Span
Last Post by Vish0203
Featured Replies
• 1

Are you sure that you needed to remove them instead of only not show them or pass them? #include <stdio.h> #include <stdlib.h> int iarr[] = {1, 3, 0, 0, 5, 7, 0, 0, 0, 9, 9, 6, 0, 9}; int len = sizeof(iarr)/sizeof(iarr[0]); int main() { int i; for (i …

one way is to store the values after the index containing 0 to an index before it, but you need to be aware of the last index of the array that has a value

A better approach would be using stack or queue

isnt there a function that does that?
is there a way to replace 0 with space?

s there a way to replace 0 with space?

you cannot replace 0 with a space, as you are using an integer array. Whereas, space comes under characters. If you try to do that, the program will print the ASCII value of space bar instead of giving a space

And when you are incrementing "i" , you need to take

``````if(a[i]==0)
``````

Edited by Vish0203

how to remove zeros from int array? for ex if i have a array 1,2,0,34 than result is 1,2,34.

I wrote my program in this way... See how does it work.. wht i did is, whenever a zero occured in array, i swapped the value with the next one.

Here's my code!

``````#include<conio.h>
#include<stdio.h>
int main()
{
int a[5],i;  //has the value 0,1,0,3
printf("enter array elements");
for(i=0;i<5;i++)
{
scanf("%d",&a[i]);
}
printf("Array elements are\n");
for(i = 0; i < 5; i++)
{
if(a[i] == 0)
{
a[i]=a[++i];  //this is what i did
}
printf("%d ",a[i]);
}
return 0;
}
``````

Edited by Vish0203

@Vish0203

nope you need to think about every scenario that could happen

what if the array has values:
1 2 0 4 0 , //values that end with zero or
1 0 0 4 5 //values that have successive or repeating zeros

etc....

Edited by zeroliken: added info

so i guess the only way would be to make a two arrays?

@zeroliken
Hmmm.. you are right!! didn't thought about that!!

@hwoarang69 yea... you better go with it!!

hey!!! wait a sec!!

How about this???? ? The second "If" statement, checks for the repeated zeroes...

``````#include<conio.h>
#include<stdio.h>
int main()
{
int a[5],i;  //has the value 0,1,0,3
printf("enter array elements");
for(i=0;i<5;i++)
{
scanf("%d",&a[i]);
}
printf("Array elements are\n");
for(i = 0; i < 5; i++)
{
if(a[i] == 0)
{
//this is what i did
a[i]=a[++i];
}
if(a[i]!=0)
printf("%d ",a[i]);
}
return 0;
}
``````

Edited by Vish0203

naah!! its wrong.. sorry!! We can't do it!!

I just threw this together. It will move all zero values to the end of the array. Hope it helps.

``````    int iarr[] = {1, 3, 0, 0, 5, 7, 0, 0, 0, 9, 9, 6, 0};
int len = sizeof(iarr)/sizeof(iarr[0]);
int i , j, idx;

for (idx = 0; idx < len; ++idx)
{
if (iarr[idx] == 0)
{
j = idx;
++j;

while (iarr[j] == 0 && j < len)
{
++j;
}

iarr[idx] = iarr[j];
// set substituted value to zero
iarr[j] = 0;
}
}

for (i = 0; i < len; ++i)
{
printf("%d ", iarr[i]); // 1, 3, 5 ,7, 9, 9, 6, 0, 0, etc
}
``````

Edited by nullptr

yea.. that's ok but, we dont want zeroes to be displayed...

Then don't show them.

``````for (i = 0; i < len; ++i)
{
if (! iarr[i])
break;

printf("%d ", iarr[i]); // 1 3 5 7 9 9 6
}
``````

Also in my previous post, lines 10 to 15 can be replaced with:

``````while (iarr[++j] == 0 && j < len) ;
``````

Edited by nullptr

Your program shows a garbage value at the end!
i mean the output is

``````1 3 5 7 9 9 6 9151
``````

Can you remove this garbage value?

To remove the garbage, put lines 17 to 19 of nullptr's previous post in an if statement with condition j < len

hehe.... Problem solved!!!

Simpler solution is to replace lines 10 to 15 with

``````while (iarr[++j] == 0 && j < len - 1) ;
``````

thanks alot guys!

Are you sure that you needed to remove them instead of only not show them or pass them?

``````#include <stdio.h>
#include <stdlib.h>

int iarr[] = {1, 3, 0, 0, 5, 7, 0, 0, 0, 9, 9, 6, 0, 9};
int len = sizeof(iarr)/sizeof(iarr[0]);

int main()
{
int i;
for (i = 0; i < len; i++)
{
if(iarr[i]) printf("%d ", iarr[i]);
}
}
``````

Edited by pyTony: fix to postincrement, remove stale comment

@pytony

That's awesome!!
in "if" statement, if iarr[i]=0, means the statement is false and hence it doesn't print it!!
Is that what happening there???

This topic has been dead for over six months. Start a new discussion instead.
Have something to contribute to this discussion? Please be thoughtful, detailed and courteous, and be sure to adhere to our posting rules.